更新不同深度的嵌套字典
使用另一个嵌套字典的内容无缝更新嵌套字典 (dictionary1)(更新)在保留特定键值对的同时,有必要采用考虑字典不同深度的递归解决方案。
考虑以下示例场景:
更新之前:
dictionary1 = { "level1": { "level2": {"levelA": 0, "levelB": 1} } } update = { "level1": { "level2": {"levelB": 10} } }
使用标准更新方法会覆盖字典1中现有的“level2”值,导致:
dictionary1.update(update) print(dictionary1)
{ "level1": { "level2": {"levelB": 10} # "levelA" is lost } }
递归解决方案:
为了满足此保留要求,以下 Python 代码提供了递归解决方案:
import copy def update_dictionary(d, u): for k, v in u.items(): if isinstance(v, dict): # If the value is a dictionary, recursively update d[k] = update_dictionary(d.get(k, {}), v) else: # If the value is not a dictionary, simply update d[k] = copy.deepcopy(v) return d
此解决方案创建原始字典1的深层副本以防止就地更新。然后它迭代更新字典 (u) 并递归更新 d 中的相应值。如果值为字典,则继续递归;
用法:
将此解决方案应用于前面的示例:
result = update_dictionary(dictionary1, update) print(result)
结果:
{ "level1": { "level2": {"levelA": 0, "levelB": 10} # "levelA" preserved } }
此解决方案有效更新“levelB”值,同时保留原始字典中的“levelA”值。它处理不同深度的嵌套字典,确保在更新过程中保留特定的键值对。
以上是如何在保留特定键值对的同时更新嵌套字典?的详细内容。更多信息请关注PHP中文网其他相关文章!