对2-D python列表中的项目求和值

时间:2016-07-19 17:09:44

标签: python list

我有一个这样的二维列表:

myList = [ ['A', 1], ['B', 1], ['C', 3], ['A', -1], ['B', 1], ['D', 2] ];

我希望得到以下结果:

mySum = [ ['A', 0], ['B', 2], ['C', 3], ['D', 2] ];

尽我所能,但不知何故找不到任何合理优雅的答案!

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]]