如何在深度嵌套Python字典中将指定key的键值对替换为其值
Python任意深度嵌套字典指定key层级合并方案
报错原因说明
你遇到的RuntimeError: dictionary changed size during iteration错误,是因为直接遍历字典的动态键值对视图时,对原字典执行增删操作修改了字典长度,触发了Python的迭代保护机制。规避该问题的核心是遍历字典键值对的静态副本,而非动态视图。
实现代码
def flatten_target_key(input_dict: dict, target_key: str) -> dict: # 遍历键值对的列表副本,不受后续原字典修改影响 for k, v in list(input_dict.items()): if isinstance(v, dict): # 先递归处理子层级的嵌套字典 flatten_target_key(v, target_key) # 检查当前key是否为要合并的目标key if k == target_key: # 把子字典所有键值对合并到父字典 input_dict.update(v) # 删除原目标key input_dict.pop(k) return input_dict # 测试示例 dict_nested = { "key_":{ "key0a":{ "key1a":{ "sub_key2a":"sub_value2a", "sub_key2b":"sub_value2b"}, "key1b":"value1b"}, "key0b":{ "key_XYZ":{ "key1a":{ "sub_key2a":"sub_value2a", "sub_key2b":"sub_value2b"}, "key1b":"value1b"} } } } dict_nested_new = flatten_target_key(dict_nested, "key1a") print(dict_nested_new)
功能说明
- 支持任意深度的嵌套字典处理,所有出现目标key的位置都会被合并
- 不会修改除目标key外的其他原有键值对结构
- 遍历使用
list(input_dict.items())生成静态副本,从根源避免迭代过程中修改字典触发的报错 - 先递归处理子层级再判断当前key,保证深层嵌套的目标key也能被正确识别合并
注意:如果目标key对应的value不是字典类型,代码会保留原键值对不处理,如果你需要适配非字典类型的value,可以根据业务需求调整
k == target_key分支的处理逻辑。
内容的提问来源于stack exchange,提问作者questionto42
相关产品推荐
相关产品推荐

