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

Python递归合并深层嵌套字典 键重叠时将对应值存入列表

Python 深度嵌套字典递归合并实现

合并规则

  • 不覆盖已有键对应的取值
  • 相同层级出现重叠键时,若对应值相等则保留单个值,若值不等则将多个值存入列表

实现代码

def deep_merge(dict_a, dict_b):
    # 拷贝原字典避免修改输入数据
    merged = dict_a.copy()
    for key, value_b in dict_b.items():
        if key not in merged:
            merged[key] = value_b
            continue
        value_a = merged[key]
        # 两个值均为字典时递归合并
        if isinstance(value_a, dict) and isinstance(value_b, dict):
            merged[key] = deep_merge(value_a, value_b)
            continue
        # 值相等直接保留原值
        if value_a == value_b:
            continue
        # 值不等时转换为列表存储
        if isinstance(value_a, list):
            merged[key] = value_a + [value_b]
        else:
            merged[key] = [value_a, value_b]
    return merged

如果需要合并两个以上字典,可以借助functools.reduce批量处理

示例验证

输入字典1

dict1 = {
    'level_1_a': 1,
    'level_1_b': {
        'level_2_a': 2,
        'level_2_b': {
            'level_3_a': 3
        },
        'level_2_c': {
            'level_3_b': 4
        }
    }
}

输入字典2

dict2 = {
    'level_1_a': 2,
    'level_1_b': {
        'level_2_a': 2,
        'level_2_b': {
            'level_3_a': 2
        },
        'level_2_c': {
            'level_3_b': 2
        }
    }
}

运行代码

result = deep_merge(dict1, dict2)

输出结果

{
    'level_1_a': [1, 2],
    'level_1_b': {
        'level_2_a': 2,
        'level_2_b': {
            'level_3_a': [3, 2]
        },
        'level_2_c': {
            'level_3_b': [4, 2]
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:00