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

迭代时修改字典大小报错,是否有支持该操作的Python旧版本?

回答

支持该操作的Python版本

  • 所有Python 2.x版本:在Python 2中,直接迭代字典(for i in di)时,会隐式生成字典键的静态列表副本,迭代完全基于这个副本进行——哪怕你在循环里删除原字典的键,也不会干扰迭代流程,自然不会触发RuntimeError。
  • 所有Python 3.x版本(3.0及以后)都不支持这种写法:从Python 3开始,迭代字典返回的是动态的dict_keys视图对象,它会实时同步原字典的变化。一旦迭代过程中字典的大小被修改(比如删除键),就会抛出RuntimeError: dictionary changed size during iteration。

差异原因

Python 2的字典迭代逻辑是先复制键到列表,让迭代与原字典的动态变化解耦;而Python 3为了优化内存占用和迭代性能,改用了动态视图机制,视图直接绑定原字典,因此严格禁止迭代时修改字典大小。

跨版本兼容的修正写法

要让代码在所有Python版本里都能正常运行,只需先把字典的键转换成列表副本再迭代:

di={'1':[1],'2':[2],'3':[1,2,3,4],'4':[4,5,6]}
print(di)
# 迭代键的列表副本,避免修改原字典影响迭代流程
for i in list(di):
    if len(di[i])>=2: del di[i]
print(di)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:57:16