将第一列中的项目分组到字典中,^{}使其更容易:from collections import defaultdict
sums = defaultdict(int)
for tup in l:
sums[tup[0]] += int(tup[1])
defaultdict如果键不存在,则调用传入的工厂以生成默认值(int在本例中,生成一个0):
^{pr2}$
演示:>>> l=[['A1','1','2'],['A1','1','2'],['A1','3','3'],['B1','1','2'],['B1','5','5']]
>>> from collections import defaultdict
>>> sums = defaultdict(int)
>>> for tup in l:
... sums[tup[0]] += int(tup[1])
...
>>> sums
defaultdict(, {'B1': 6, 'A1': 5})
那么,打印总和的方法很简单:for key in sorted(sums):
print 'sum{}={}'.format(key, sums[key])
如果您的输入列表是按排序的,请使用itertools.groupby():from itertools import groupby
from operator import itemgetter
sums = {key: sum(int(t[1]) for t in group) for key, group in groupby(l, key=itemgetter(0))}
演示:>>> from itertools import groupby
>>> from operator import itemgetter
>>> {key: sum(int(t[1]) for t in group) for key, group in groupby(l, key=itemgetter(0))}
{'B1': 6, 'A1': 5}
实际上,使用排序列表和groupby可以直接切换到打印:for key, group in groupby(l, key=itemgetter(0)):
print 'sum{}={}'.format(key, sum(t[1]) for t in group))
如果没有外部模块,我只需要一个字典;这将比上述任何一个选项都慢:sums = {}
for tup in l:
sums[tup[0]] = sums.get(tup[0], 0) + int(tup[1])
或者,对于已排序的变量:sum, last = 0, l[0][0]
for tup in l:
key = tup[0]
if last != key and sum:
print 'sum{}={}'.format(last, sum)
sum, last = 0, key
sum += int(tup[1])
if sum:
print 'sum{}={}'.format(key, sum)