首页  >  文章  >  后端开发  >  如何在保留特定键值对的同时更新嵌套字典?

如何在保留特定键值对的同时更新嵌套字典?

Linda Hamilton
Linda Hamilton原创
2024-11-06 17:30:03221浏览

How to Update a Nested Dictionary While Preserving Specific Key-Value Pairs?

更新不同深度的嵌套字典

使用另一个嵌套字典的内容无缝更新嵌套字典 (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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn