Python 嵌套dicts更新

Python 嵌套dicts更新,python,dictionary,Python,Dictionary,我有这个片段 dict_a = {'key_1_lv_1': {'key_1': 'value_1'}, 'key_2_lv_1': {'key_1_lv_2': 'value_1', 'key_2_lv_2': 'value_2', 'key_3_lv_2': 'value_3'}, } dict_b = {'key_1_lv_1': {'key_1': 'value_1'}, 'key_2_lv_1': {'key_1_lv_2': 'new_value

我有这个片段

dict_a = {'key_1_lv_1': {'key_1': 'value_1'},
      'key_2_lv_1': {'key_1_lv_2': 'value_1', 'key_2_lv_2': 'value_2', 'key_3_lv_2': 'value_3'},
      }

dict_b = {'key_1_lv_1': {'key_1': 'value_1'},
      'key_2_lv_1': {'key_1_lv_2': 'new_value'},
      }
执行此行时:

dict_a.update(dict_b)
然后打印dict_a['key_2_lv_1'],它会给我:

{'key_1_lv_2': 'new_value'}, only. The other 2 key-value pairs are missing,, but i need them. 
如果dict没有嵌套,我会得到另外两个键值对。 那么,有没有灵巧的解决方案来获取嵌套dict中缺少的键值呢?

代码:

dict_a = {'key_1_lv_1': {'key_1': 'value_1'},
      'key_2_lv_1': {'key_1_lv_2': 'value_1', 'key_2_lv_2': 'value_2', 'key_3_lv_2': 'value_3'},
      }
dict_b = {'key_1_lv_1': {'key_1': 'value_1'},
      'key_2_lv_1': {'key_1_lv_2': 'new_value'},
      }
for k,v in dict_b.items():
    dict_a[k] = {**dict_a.get(k,{}),**v}
print(dict_a)
结果:

{'key_1_lv_1': {'key_1': 'value_1'}, 'key_2_lv_1': {'key_1_lv_2': 'new_value', 'key_2_lv_2': 'value_2', 'key_3_lv_2': 'value_3'}}

您可以递归更新:


def递归_更新(d1、d2):
对于d2中的键:
#检查两个dict上是否都存在密钥,如果存在,则合并它们
如果输入d1和isinstance(d1[键],dict)和isinstance(d2[键],dict):
#递归地调用相同的函数
递归_更新(d1[键]、d2[键])
#如果需要,也可以在此处添加用于合并列表或其他数据类型的其他条件
其他:
d1[键]=d2[键]
#注意:此函数在适当的位置工作,因此没有返回
用法:

recursive_update(dict_a, dict_b)
  

如果您确实知道您的数据结构将是一个完全具有1级嵌套的dict,那么@leaf_yakitori的答案也会起作用,并且更加简洁。如果某些值不是dicts,或者嵌套级别超过2级,则此函数有效。

非常感谢:)您所说的是可能的,这就是为什么采用您的解决方案的原因。我认为这对我来说更准确。