2016-01-21 92 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