Python:实现嵌套字典的深度更新函数
嵌套字典的深度更新实现
给定一个嵌套字典my_dict和另一个嵌套字典update,update包含一系列my_dict中已有的有效键,用于为对应路径的叶子节点赋值,示例如下:
my_dict = { 'city': 'NYC', 'person1': {'age': 25, 'name': 'Anna'}, 'person2': {'age': 30, 'name': 'Bob'} } update0 = {'city': 'London'} update1 = {'person1': {'age': 24}} update2 = {'person2': {'age': 31}}
需要实现一个UpdateDict函数,使得调用UpdateDict(my_dict, update1)后,仅更新person1的age值,同时保留name键,返回结果如下:
{ 'city': 'NYC', 'person1': {'age': 24, 'name': 'Anna'}, 'person2': {'age': 30, 'name': 'Bob'} }
调用UpdateDict(my_dict, update0)则返回更新city值的字典:
{ 'city': 'London', 'person1': {'age': 25, 'name': 'Anna'}, 'person2': {'age': 30, 'name': 'Bob'} }
在C++中可以通过显式指针或引用操作子字典,但Python中因为不知道update的嵌套深度,初期很难处理。尝试使用{**my_dict, **update1}或者my_dict.update(update1)这类方法时,会直接替换整个子字典,导致同层级的其他键丢失,不符合需求。最终可以通过递归方法解决,代码如下:
def UpdateDict(original, param): for key in param.keys(): if type(param[key]) == dict: UpdateDict(original[key], param[key]) else: original[key] = param[key]
内容的提问来源于stack exchange,提问作者SBF
相关产品推荐
相关产品推荐

