具有深度保留的嵌套字典更新
在 Python 中,更新嵌套字典可能很棘手,特别是当您想要将其内容与另一个字典,同时保留不同深度的特定值。考虑以下场景:
给定两个字典,dictionary1 和 update,我们如何使用 update 的内容更新dictionary1,而不覆盖最深级别的特定值(例如“levelA”),同时更新所有其他值?
dictionary1 = { "level1": { "level2": {"levelA": 0, "levelB": 1} } } update = { "level1": { "level2": {"levelB": 10} } }
如果我们简单地使用 update 方法,它会覆盖整个“level2”子词典,丢失“levelA”值:
dictionary1.update(update) print(dictionary1)
{ "level1": { "level2": {"levelB": 10} } }
解决这个挑战,我们需要一个递归解决方案,考虑字典的可变深度并适当地合并值。
递归解决方案:
以下代码实现了递归“部分更新”更新字典值而不覆盖指定键的函数:
import copy def partial_update(d, u, preserve): for k, v in u.items(): if isinstance(v, dict): if d.get(k, None) is None: d[k] = copy.deepcopy(v) else: partial_update(d[k], v, preserve) elif k in preserve: continue else: d[k] = copy.deepcopy(v) return d
partial_update 函数采用三个参数:
要保留示例中的“levelA”值,我们可以使用以下代码:
partial_update(dictionary1, update, ["levelA"]) print(dictionary1)
{ "level1": { "level2": {"levelA": 0, "levelB": 10} } }
在此解决方案中,我们在更新之前制作字典的副本,以防止意外修改。这确保了即使在部分更新后原始词典也保持不变。
以上是如何在 Python 中更新嵌套字典,同时保留不同深度的特定值?的详细内容。更多信息请关注PHP中文网其他相关文章!