我有一个这样的二维列表:
myList = [ ['A', 1], ['B', 1], ['C', 3], ['A', -1], ['B', 1], ['D', 2] ];
我希望得到以下结果:
mySum = [ ['A', 0], ['B', 2], ['C', 3], ['D', 2] ];
尽我所能,但不知何故找不到任何合理优雅的答案!
答案 0 :(得分:2)
这是一个非常简单的分级操作。 collections.defaultdict
可以很好地运作:
from collections import defaultdict
d = defaultdict(int)
for k, v in myList:
d[k] += v
print d.items() # print(list(d.items())) on python3.x
基本上,dict保存了分档('A'
,'B'
,'C'
,...)和一个值(该分区中的当前总和)。我们使用defaultdict
因为如果缺少bin,它将在必要时立即创建它(初始值为0)。当你遍历列表时,你查找bin的值,将当前值与bin中已有的值相加,然后将新值放回bin中。
答案 1 :(得分:-1)
尝试使用此代码:
In [69]: from itertools import groupby
In [70]: from operator import itemgetter
In [71]: myList = [['A', 1], ['B', 1], ['C', 3], ['A', -1], ['B', 1], ['D', 2]]
In [72]: [[letter, sum(map(itemgetter(1), group))] for letter, group in groupby(sorted(myList), key=itemgetter(0))]
Out[72]: [['A', 0], ['B', 2], ['C', 3], ['D', 2]]