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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:48:09