存储元组列表的字典中的值求和

时间:2019-05-23 15:00:59

标签: python data-structures sum tuples

我有一个名为lista的元组列表,该列表中的值如下所示:

[('A', 1234),('A', 9876),('B',6574),('B',9562), etc]

接下来,我创建defaultdict(list)来存储元组并得到:

([('A', [1234, 9876]),('B',[6547.9562]), etc])

要创建此代码,我写道: //列表

lista = []
for w in data:
    if self.getAmountOfProceededInSpecificYear(w.status,w.year,w.district):
            lista.append(tuple((w.district,w.amount)))

// dict

passed_dict = defaultdict(list)
for k,v in lista:
    passed_dict[k].append(v)

现在,我想对每个键的值求和并得到:

'A', 11110   

anobody知道如何总结这些值吗?

2 个答案:

答案 0 :(得分:2)

您可以使用defaultdict(int)代替defaultdict(list)

lista = [('A', 1234),('A', 9876),('B',6574),('B',9562)]
passed_dict = defaultdict(int)
for k,v in lista:
    passed_dict[k] += v
passed_dict
  

defaultdict(int, {'A': 11110, 'B': 16136})

答案 1 :(得分:2)

您可以按照建议的here使用itemgetter和groupby

如果您希望将列表作为输出

from itertools import groupby
from operator import itemgetter

lista = [('A', 1234),('A', 9876),('B',6574),('B',9562)]

passed_dict = [(k, sum(list(zip(*v))[1])) for k, v in groupby(lista, itemgetter(0))]
# [('A', 11110), ('B', 16136)]

如果您希望字典作为输出

passed_dict = {k: sum(list(zip(*v))[1]) for k, v in groupby(lista, itemgetter(0))}
# {'A': 11110, 'B': 16136}