Python多维字典合并:仅添加缺失元素的实现问题
多维字典合并(字典A优先,仅补充缺失元素)
需求明确:合并两个嵌套字典时,字典A始终拥有最高优先级——只把字典E里存在但A里缺失的元素补充到A中,绝对不覆盖A已有的任何内容。
示例数据
原始字典A
{'v1': {'configuration': {'$schema': '...', 'network': {'$schema': '...'}}}}
待补充字典E
{'v1': {'configuration': {'network': {'entries': {'$schema': '...'}}}}}
期望合并结果
{'v1': {'configuration': {'$schema': '...', 'network': {'$schema': '...', 'entries': {'$schema': '...'}}}}}
适配Python 3.9的实现代码
用递归函数处理嵌套结构即可:
def merge_dicts_priority(a, e): for key, value in e.items(): if key not in a: a[key] = value else: # 仅当双方都是字典时递归合并,否则保留A的原值 if isinstance(a[key], dict) and isinstance(value, dict): merge_dicts_priority(a[key], value) return a
测试验证
哪怕v1下包含额外字段,也能正常处理:
A = {'v1': {'configuration': {'$schema': '...', 'network': {'$schema': '...'}}}} E = {'v1': {'configuration': {'network': {'entries': {'$schema': '...'}}}, 'other_field': '新增字段内容'}} # 用copy避免修改原字典A,无需保留原A的话直接传A即可 merged_result = merge_dicts_priority(A.copy(), E) print(merged_result)
输出会包含other_field,完全符合需求。
逻辑说明
- 递归遍历每一层字典,确保嵌套结构里的缺失元素都能被补上
- 遇到非字典类型的值(如字符串、列表)时,直接保留A的原有内容,不会被E覆盖
- 使用
A.copy()是为了保护原始字典不被修改,可根据需求选择是否使用
内容的提问来源于stack exchange,提问作者jnbdz
相关产品推荐
相关产品推荐

