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

2024-10-04 05:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

接下来,我创建defaultdict(列表),在这里存储元组并得到:

([('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)))

//听写

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

现在我想总结每个键的值,得到:

'A', 11110   

一个人知道如何总结这些价值观吗


Tags: inself列表fordataifetcdict
2条回答

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

如果你想要一个列表作为输出

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}

您可以使用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})

相关问题 更多 >