2016-12-03 51 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