Python合并两字典时如何实现公共键对应数值求和
问题根因
dict.update()方法的默认行为是批量覆盖/新增键值对:对于传入字典中的键,若原字典已存在同名键,直接用新值替换旧值,不存在则新增,不会对值做任何算术运算,因此公共键Dean Craig Pelton最终取了dict2中的2500000,没有触发求和逻辑。
修正实现
以下是几种可落地的实现方式,可根据自己使用的Python版本选择:
- 通用兼容版(支持所有Python3版本,无依赖)
先拷贝其中一个字典作为结果基底,遍历第二个字典的键值对,同名键累加值,不存在则直接新增:
dict1 = { "Elizabeth Alexandra Mary": 250000, "Barack Hussein Obama II": 1750000, "Zhang Aiqin": 1000, "Dean Craig Pelton": 1000000, } dict2 = { "Christopher Larkin": 50000, "Eyal Shani": 5000, "Dean Craig Pelton": 2500000, "Sheldon Cooper": 15600000 } merged = dict1.copy() for k, v in dict2.items(): merged[k] = merged.get(k, 0) + v print('合并后的字典:') print(merged)
运行后Dean Craig Pelton对应值为1000000 + 2500000 = 3500000,符合预期。
- 简洁版(Python 3.9+ 可用)
借助标准库collections.Counter实现,Counter原生支持同键计数累加:
from collections import Counter merged = dict(Counter(dict1) + Counter(dict2))
注意:Counter做加法运算时会自动丢弃值≤0的项,如果你的业务场景可能出现0或负数值,不要使用该方案。
- 字典推导式版(Python 3.10+ 可用)
取两个字典所有键的并集,逐个计算值的和:
merged = {k: dict1.get(k, 0) + dict2.get(k, 0) for k in dict1.keys() | dict2.keys()}
内容的提问来源于stack exchange,提问作者Somebody
相关产品推荐
相关产品推荐

