如何更新不同层级嵌套字典中指定子字典的所有实例
批量更新嵌套字典中指定子字典的方法
先看你的目标场景:
dictionary1 = { "level11": { "level12": {"levelA": 0, "levelB": 1} }, "level21": { "level22": { "level23": {"levelA": 0, "levelB": 1}, } } }
需要把所有和{"levelA": 0, "levelB": 1}完全匹配的子字典,替换成{"levelA": 2, "levelB": 3}。
可以用递归遍历的方式实现,不管字典嵌套多深,都能找到所有符合条件的子字典并替换:
def update_nested_dict(d, target, replacement): # 遍历字典的每个键值对 for key, value in d.items(): if isinstance(value, dict): # 如果值是字典,递归处理子层级 update_nested_dict(value, target, replacement) # 递归后检查当前层级的字典是否匹配目标 if value == target: d[key] = replacement else: # 非字典类型直接跳过 continue # 定义目标字典和替换用的新字典 target_dict = {"levelA": 0, "levelB": 1} new_dict = {"levelA": 2, "levelB": 3} # 调用函数更新原字典 update_nested_dict(dictionary1, target_dict, new_dict) # 输出验证结果 print(dictionary1)
代码说明
- 递归函数会逐层深入嵌套结构,覆盖所有层级的字典
- 先递归处理子字典,再检查当前层级的字典是否匹配目标,避免遗漏任何层级的匹配项
- 只有和目标字典完全一致的子字典才会被替换,不会误改其他结构
运行后原字典会更新为:
{ "level11": { "level12": {"levelA": 2, "levelB": 3} }, "level21": { "level22": { "level23": {"levelA": 2, "levelB": 3}, } } }
内容的提问来源于stack exchange,提问作者user1612986
相关产品推荐
相关产品推荐

