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

Python使用for循环修改字典键触发RuntimeError的原因排查

字典键修改报错原因及解决办法

为啥会报这个错?

Python里字典的items()返回的是个动态视图,它会跟着字典的实时变化走。你在遍历的时候,用d.pop(key)删掉了原来的键,还加了新键,这直接改了字典的键集合,迭代器本来是按原键顺序遍历的,现在结构变了,它没法继续,就抛出RuntimeError了。说白了就是:你一边遍历字典,一边拆改它的结构,迭代器跟不上趟了。

正确的写法有这几种

1. 遍历原键的副本

把原字典的键转成列表(相当于存了一份固定的旧键清单),这样遍历的是固定的旧键,不会受后续修改影响:

import re

d = {"given_age":"30","given_weight":"160","given_height":6}
for key in list(d.keys()):  # 用list()生成键的静态副本
    new_key = re.sub(r'given_','',key)
    if new_key != key:
        d[new_key] = d.pop(key)

2. 用字典推导式直接生成新字典

这种更简洁,直接造个新字典,不用动原字典的结构:

import re

d = {"given_age":"30","given_weight":"160","given_height":6}
d = {re.sub(r'given_','',k): v for k, v in d.items()}

3. 遍历原items的副本

和第一种思路类似,遍历list(d.items())生成的静态副本,这样遍历过程中修改原字典也不会影响迭代:

import re

d = {"given_age":"30","given_weight":"160","given_height":6}
for key, value in list(d.items()):
    new_key = re.sub(r'given_','',key)
    if new_key != key:
        d.pop(key)
        d[new_key] = value

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:22:07