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

如何按顺序合并多个字典并将同键值相加?

字典合并:相同键值累加的简便实现

示例数据

dictA = {'A': 1, 'B': 2, 'C': 3}
dictB = {'C': 1, 'D': 2, 'E': 3}
dictC = {'A': 2, 'C': 4, 'E': 6, 'G': 8}

合并要求

  • 相同键对应的值累加(如dictA的'A':1与dictC的'A':2合并后为'A':3)
  • 遇到新键直接新增(如合并后新增键'G')

预期结果

(注:你给出的预期结果中'G'的值为2是笔误,实际应为8)

resultDict = {'A': 3, 'B': 2, 'C': 8, 'D': 2, 'E': 9, 'G': 8}

实现方法

1. 普通单层字典的简便实现

用collections.defaultdict配合循环累加,代码简洁高效:

from collections import defaultdict

def merge_dicts(*dicts):
    merged = defaultdict(int)
    for d in dicts:
        for k, v in d.items():
            merged[k] += v
    return dict(merged)

# 调用示例
resultDict = merge_dicts(dictA, dictB, dictC)
print(resultDict)
# 输出: {'A': 3, 'B': 2, 'C': 8, 'D': 2, 'E': 9, 'G': 8}

也可以用functools.reduce简化逻辑:

from functools import reduce
from collections import defaultdict

def accumulate_dict(merged, current):
    for k, v in current.items():
        merged[k] += v
    return merged

resultDict = dict(reduce(accumulate_dict, [dictA, dictB, dictC], defaultdict(int)))

2. 多层嵌套字典的处理

对于嵌套多层的字典,需要递归遍历每个层级的键值对实现累加:

def merge_nested_dicts(*dicts):
    merged = {}
    for d in dicts:
        for k, v in d.items():
            if k in merged and isinstance(merged[k], dict) and isinstance(v, dict):
                merged[k] = merge_nested_dicts(merged[k], v)
            elif k in merged:
                merged[k] += v
            else:
                merged[k] = v
    return merged

# 示例嵌套字典
nestedA = {'A': 1, 'B': {'X': 2, 'Y': 3}}
nestedB = {'B': {'Y': 1, 'Z': 2}, 'C': 3}
nestedC = {'A': 2, 'B': {'X': 4}, 'C': 6}

# 调用后结果:{'A': 3, 'B': {'X': 6, 'Y': 4, 'Z': 2}, 'C': 9}

如果嵌套结构复杂,可使用deepmerge库(需提前安装:pip install deepmerge),自定义合并策略实现值累加:

from deepmerge import always_merger

def sum_merge(config, path, base, nxt):
    if isinstance(base, int) and isinstance(nxt, int):
        return base + nxt
    return always_merger.merge(base, nxt)

# 配置合并策略
merger = always_merger
merger.add_override(sum_merge)

# 合并嵌套字典
result = merger.merge(nestedA, nestedB, nestedC)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:00:03