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
相关产品推荐
相关产品推荐

