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

如何高效聚合两个字典?按键求和合并的最优方法

问题:合并两个字典并对共同键的值求和聚合

我有两个字典:

a = {'a':1, 'b':2, 'c':3, 'd':4}
b = {'a':10, 'b':20, 'c':30, 'e':50}

我希望合并这两个字典,对共同键对应的值进行求和聚合,最终得到如下结果:

merged = {'a':11, 'b':22, 'c':33, 'd':4, 'e':50}

目前我知道一种可行方案是将两个dict转换为pandas DataFrame,使用groupby()处理后再转回dict,但我想了解是否存在更高效的实现方式?


高效实现方案

当然有!相比依赖pandas的方案,纯Python的实现通常更轻量、开销更低,这里给你几种实用的高效方法:

方法1:普通字典循环(直观且性能优异)

这是最基础也最高效的方式之一,不需要任何额外库,逻辑清晰易懂:

merged = a.copy()  # 先复制第一个字典的所有键值对
for key, value in b.items():
    if key in merged:
        merged[key] += value
    else:
        merged[key] = value

优点:没有第三方依赖,内存占用小,对于中小型字典来说速度最快,调试和维护也简单。

方法2:用collections.defaultdict简化累加逻辑

借助标准库的defaultdict,可以省去判断键是否存在的步骤,代码更简洁:

from collections import defaultdict

merged = defaultdict(int)
# 遍历所有需要合并的字典
for d in (a, b):
    for key, value in d.items():
        merged[key] += value
# 如需转回普通字典,执行下面这行
merged = dict(merged)

优点:扩展性极强,如果后续需要合并3个甚至更多字典,只需要把字典加入到tuple(a, b)中即可,代码改动极小。

方法3:字典推导式一行实现

如果你偏好紧凑的代码,字典推导式结合dict.get()可以一行搞定:

merged = {key: a.get(key, 0) + b.get(key, 0) for key in set(a) | set(b)}

这里set(a) | set(b)获取了两个字典所有键的并集,对每个键分别从两个字典中取值(不存在则返回0)后求和。
优点:代码简洁直观,适合快速实现;缺点是如果字典规模极大,创建键的集合会有轻微的内存开销,但依然远胜pandas方案。

方法4:Python 3.10+ 用Counter快速求和

如果你的Python版本在3.10及以上,collections.Counter可以直接处理多个字典的键值对,自动完成求和:

from collections import Counter
from itertools import chain

merged = dict(Counter(chain(a.items(), b.items())))

chain用来把两个字典的键值对串联成一个迭代器,Counter会自动统计每个键的总数值,最后转成普通字典即可。

性能说明

以上所有纯Python方法的性能都远超pandas方案——pandas需要创建DataFrame、执行分组聚合等重型操作,带来了大量额外开销。对于绝大多数场景,尤其是字典规模不大时,纯Python方法在速度和内存效率上的优势非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:30:36