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

Python遍历嵌套字典替换键时遇RuntimeError的解决方法

解决字典键替换空格为下划线时的RuntimeError问题

错误原因

你遇到的RuntimeError: dictionary keys changed during iteration,是因为在遍历字典的同时直接修改了它的键集合(通过pop删除旧键、update添加新键)。字典的迭代器依赖于初始键集合的稳定性,中途修改键会破坏迭代器的状态,触发报错。

解决方案1:遍历键的副本

通过将字典的键转换为列表(创建快照),遍历这个固定的键列表,后续修改原字典不会影响迭代过程:

test_parameters = {
        'Debug Properties': {'DUT WRT Dump': True, 'DUT WRT Tool': True, "DUT Preset": "Stater"},
        'Attenuation Values': {'DUT To BTOE': '3'},
        'BT Parameters': {'Connection Interval': '7.5', 'Traffic_Duration': '30'},
    }

# 遍历外层字典键的副本
for group in list(test_parameters.keys()):
    new_group_name = group.replace(" ", "_")
    group_value = test_parameters.pop(group)
    
    # 处理内层字典,同样遍历键的副本
    for key in list(group_value.keys()):
        new_key_name = key.replace(" ", "_")
        key_value = group_value.pop(key)
        group_value[new_key_name] = key_value
    
    test_parameters[new_group_name] = group_value

解决方案2:创建新字典(推荐)

直接构建全新的嵌套字典,完全不修改原数据,代码更简洁安全,避免迭代冲突:

test_parameters = {
        'Debug Properties': {'DUT WRT Dump': True, 'DUT WRT Tool': True, "DUT Preset": "Stater"},
        'Attenuation Values': {'DUT To BTOE': '3'},
        'BT Parameters': {'Connection Interval': '7.5', 'Traffic_Duration': '30'},
    }

new_parameters = {}
for outer_key, inner_dict in test_parameters.items():
    # 替换外层键的空格
    new_outer_key = outer_key.replace(" ", "_")
    # 用字典推导式替换内层键的空格
    new_inner_dict = {k.replace(" ", "_"): v for k, v in inner_dict.items()}
    new_parameters[new_outer_key] = new_inner_dict

这种方式不会修改原字典,同时利用字典推导式简化了内层字典的处理逻辑,可读性和安全性更高。

内容的提问来源于stack exchange,提问作者Barak Michaeli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:12:24