2016-12-03 59 views
2

我有元組,例如列表的列表:彙總使用某些成員的等價在元組(通過Python)元組

[(a, 0), (a, 2), (a, 1), (a, 1), (a, 1), (a, 1), (a, 0), (b, 0), (a, 0), (b, 0), (b, 0), (b, 0), (b, 0), (b, 0), (b, 4)] 

我想一起添加元組,其中第一元件的整個第2元件是一樣的。也就是說,上面的列表將變爲:

[(a,0+2+1+1+1+1+0+0),(b,0+0+0+0+0+0+4)] = [(a,6),(b,4)] 

什麼是在python中完成此操作的最快方法?

+1

它應該是'(A,6)' – RomanPerekhrest

回答

1

使用itertools.groupby(iterable, key=None)sum(iterable[, start])函數的溶液:

l = [('a', 0), ('a', 2), ('a', 1), ('a', 1), ('a', 1), ('a', 1), ('a', 0), ('b', 0), ('a', 0), ('b', 0), ('b', 0), ('b', 0), ('b', 0), ('b', 0), ('b', 4)] 
result = [(k,sum(i[1] for i in list(v))) for k,v in itertools.groupby(sorted(l), key=lambda x: x[0])] 

print(result) 

輸出:

[('a', 6), ('b', 4)] 

https://docs.python.org/3/library/itertools.html#itertools.groupby