2016-01-21 91 views
-4

我有与内容隔离列表中的两个索引并将其中一个索引与另一个索引进行求和?

[100,123,111] 
[010,789,222] 
[001,123,222] 
[230,789,234] 

我想要的号码的索引2,其在索引1对于上述示例共享相同的数目的总和,期望输出是

[333,456] 
文本文件

因为111 + 222 = 333(在索引1共享数:123),并且因为222 + 234 = 456。

+0

欢迎来到Stack Overflow!你似乎在要求某人为你写一些代码。堆栈溢出是一个问答网站,而不是代码写入服务。请[see here](http://stackoverflow.com/help/how-to-ask)学习如何编写有效的问题。 –

+0

你有任何收藏的列表吗?在一个列表或一组? – timgeb

+0

@timgeb列表位于一个打开的.txt文件中。 – Desperate

回答

0

确定,这里是与ast.literal_evalcollections.OrderedDict的方法。

让lists.txt与

[10]
[010789222]
[001123222]
[230789234]

>>> from ast import literal_eval 
>>> from collections import OrderedDict 
>>> with open('lists.txt') as f: 
...  d = OrderedDict() 
...  for line in f: 
...   lst = literal_eval(line) 
...   d[lst[1]] = d.get(lst[1], 0) + lst[2] 
... 
>>> d.values() 
[333, 456] 
+0

感谢您的帮助,我就做更多的研究下一次,问更好的问题^ _^ – Desperate

0

我使用的内容文件一个defaultdict缩短添加元素到字典的代码。我只是保持索引1作为密钥的运行总数,然后打印出值

from collections import defaultdict 

l = [[100,123,111], 
    [010,789,222], 
    [001,123,222], 
    [230,789,234]] 

d = defaultdict(int) 

for i in l: 
    d[i[1]] = d[i[1]]+i[2] 

print d.values() 

[333, 456] 
+0

感谢您的帮助了^ _^ – Desperate

+0

这个假设第二个元素的顺序总是123,789,123,789,......这是真的吗?我原来的问题没有看到它。 – timgeb

+0

@timgeb是的,你是对的。我不明白从原来的问题,但我更新我的答案 – SirParselot