You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在深度嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 02:51:02