You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并Python列表中同name键的字典并累加quantity值?

解决Python列表中相同name字典的合并与quantity累加问题

没问题,我来帮你搞定这个需求!要合并相同name的字典并累加quantity,最直观高效的方法是先用一个临时字典存储每个name对应的总数量,最后再转换成目标列表格式。

方法一:基础字典实现

这种方法不需要额外导入模块,适配所有Python版本:

user = [
    {'name': 'ozzy', 'quantity': 5},
    {'name': 'frank', 'quantity': 4},
    {'name': 'ozzy', 'quantity': 3},
    {'name': 'frank', 'quantity': 2},
    {'name': 'james', 'quantity': 7},
]

# 初始化临时字典,用于存储每个name的总quantity
temp_dict = {}

for item in user:
    name = item['name']
    qty = item['quantity']
    # 如果name已在字典中就累加数量,否则初始化
    if name in temp_dict:
        temp_dict[name] += qty
    else:
        temp_dict[name] = qty

# 将临时字典转换为目标列表格式
result = [{'name': name, 'quantity': total_qty} for name, total_qty in temp_dict.items()]

print(result)
# 输出: [{'name': 'ozzy', 'quantity': 8}, {'name': 'frank', 'quantity': 6}, {'name': 'james', 'quantity': 7}]

方法二:用collections.defaultdict简化代码

如果不介意导入模块,defaultdict可以省去判断键是否存在的步骤,让代码更简洁:

from collections import defaultdict

user = [
    {'name': 'ozzy', 'quantity': 5},
    {'name': 'frank', 'quantity': 4},
    {'name': 'ozzy', 'quantity': 3},
    {'name': 'frank', 'quantity': 2},
    {'name': 'james', 'quantity': 7},
]

temp_dict = defaultdict(int)  # 默认值为0的字典
for item in user:
    temp_dict[item['name']] += item['quantity']

result = [{'name': name, 'quantity': total_qty} for name, total_qty in temp_dict.items()]

print(result)
# 输出和上面一致

思路说明

  • 临时字典的键是name,值是对应的总quantity,利用字典键的唯一性自动完成去重
  • 遍历原列表时,每个name的数量会不断累加
  • 最后通过列表推导式将字典键值对转换成目标字典的格式,得到最终结果

这两种方法的时间复杂度都是O(n),只需要遍历一次原列表,效率很高。

内容的提问来源于stack exchange,提问作者Rikkas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:35:13