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

如何在Python 3.7中合并字典并对相同键的值求和?

如何在Python 3.7中合并字典并对相同键的值求和?

嘿,我完全懂你遇到的困扰——直接用字典解包合并的话,重复的键会被后面的覆盖,根本达不到求和的效果对吧?别发愁,这里有几种实用的方法能帮你实现需求,咱们一个个来看:

方法一:手动遍历(最直观,适合理解逻辑)

这种方法就是一步步遍历所有字典的键值对,判断键是否已经存在于结果字典中,存在就累加值,不存在就直接赋值,逻辑非常清晰:

d1 = {1: 1.1, 2: 2.2}
d2 = {1: 3.3, 4: 5.5}

final_dict = {}
# 遍历所有要合并的字典
for current_dict in [d1, d2]:
    # 遍历当前字典的每个键值对
    for key, value in current_dict.items():
        if key in final_dict:
            final_dict[key] += value
        else:
            final_dict[key] = value

print(final_dict)  # 输出: {1: 4.4, 2: 2.2, 4: 5.5}

方法二:使用collections.defaultdict(更简洁的写法)

借助collections模块里的defaultdict,我们可以省去判断键是否存在的步骤,它会自动为不存在的键设置默认值(这里我们用float,默认就是0.0):

from collections import defaultdict

d1 = {1: 1.1, 2: 2.2}
d2 = {1: 3.3, 4: 5.5}

final_dict = defaultdict(float)
for current_dict in [d1, d2]:
    for key, value in current_dict.items():
        final_dict[key] += value

# 如果需要转换成普通字典(可选,defaultdict本身也能像普通字典一样用)
final_dict = dict(final_dict)
print(final_dict)  # 输出: {1: 4.4, 2: 2.2, 4: 5.5}

方法三:使用collections.Counter(适合数值类型的快速求和)

Counter本来是用来统计元素出现次数的,但它也支持数值的加法操作,刚好适合咱们的场景,而且代码更短:

from collections import Counter

d1 = {1: 1.1, 2: 2.2}
d2 = {1: 3.3, 4: 5.5}

# 把字典转换成Counter对象
counter1 = Counter(d1)
counter2 = Counter(d2)

# 直接相加就会自动对相同键的值求和
final_counter = counter1 + counter2
# 再转回普通字典
final_dict = dict(final_counter)

print(final_dict)  # 输出: {1: 4.4, 2: 2.2, 4: 5.5}

顺便说下你之前尝试的方法为什么不行:dict([*d1.items(), *d2.items()])是把两个字典的键值对都打包成一个列表,然后转换成字典。但字典的键是唯一的,后面出现的相同键会直接覆盖前面的,所以最终只会保留每个键最后一次出现的值,而不是求和。

备注:内容来源于stack exchange,提问作者24n8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:40:29