使用元组中某些成员的等价性聚合元组列表(通过python)
我有一个元组列表,例如:使用元组中某些成员的等价性聚合元组列表(通过python),python,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)] 我想把元组的所有第二个元素加在一起,其中第一个元素是相同的。即,上述清单将变为: [(a,0+2+1+1+1+1+0+0),(b,0+0+0+0+0+0+4)] = [(a,6),(b,4)] 在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)]
我想把元组的所有第二个元素加在一起,其中第一个元素是相同的。即,上述清单将变为:
[(a,0+2+1+1+1+1+0+0),(b,0+0+0+0+0+0+4)] = [(a,6),(b,4)]
在python中实现这一点的最快方法是什么?使用
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)]
应该是(a,6)