Python对字典列表的键求和

10 投票
5 回答
29876 浏览
提问于 2025-04-17 08:45

可能重复的问题:
如何对字典元素求和

我有一个字典列表,如下所示:

[{'Name': 'A', 'amt':100},
 {'Name': 'B', 'amt':200},
 {'Name': 'A', 'amt':300},
 {'Name': 'C', 'amt':400},
 {'Name': 'C', 'amt':500},
 {'Name': 'A', 'amt':600}]

我想对每个 nameamt 进行求和,并得到以下结果,格式还是字典列表:

 [{'Name':'A', 'amt':1000},
  {'Name':'B', 'amt':200},
  {'Name':'C', 'amt':900}]

5 个回答

2
output_dict = {}
for i in dict_list:
    if i['Name'] in output_dict:
        output_dict[i['Name']] = i['amt']
    else:
        output_dict[i['Name']] += i['amt']

这段话的意思是,它会给你一个字典,字典里的键是名字,值是对应的金额。如果你需要把它变成一个字典的列表:

[{'Name':key, 'amt':value} for key, value in output_dict.items()]
7

另一种可能的解决方案,这次使用了itertools库:

lst = [
{'Name': 'A', 'amt':100},
{'Name': 'B', 'amt':200},
{'Name': 'A', 'amt':300},
{'Name': 'C', 'amt':400},
{'Name': 'C', 'amt':500},
{'Name': 'A', 'amt':600}]

import itertools as it
keyfunc = lambda x: x['Name']

groups = it.groupby(sorted(lst, key=keyfunc), keyfunc)
[{'Name':k, 'amt':sum(x['amt'] for x in g)} for k, g in groups]
19
from collections import defaultdict

c = defaultdict(int)
for d in list_of_dictionaries:
    c[d['Name']] += d['amt']

它生成了 c

{'A': 1000, 'C': 900, 'B': 200}

要把它转换成字典的列表:

[{'Name': name, 'amt': amt} for name, amt in c.items()]

结果:

[{'Name': 'A', 'amt': 1000}, {'Name': 'C', 'amt': 900}, {'Name': 'B', 'amt':200}]

撰写回答