python-3.x - 在 python 中修改字典时出现意外行为
问题描述
我试图在迭代字典对象时对其进行修改。但是python会提出一个RuntimeError
说法,dictionary changed size during iteration
以避免意外行为(这是意料之中的)。
>>> a = {1: 2, 2: 3}
>>> for key in a:
... if key % 2 == 0:
... a.pop(key)
...
3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
但真正让我惊讶的是,即使上面的代码块与RuntimeError
字典一起退出,a
也被修改了。
>>> a
{1: 2}
这是为什么?。这种行为是否记录在某处?
下面是我的python版本和实现。
>>> import sys, platform
>>> sys.version_info
sys.version_info(major=3, minor=8, micro=0, releaselevel='final', serial=0)
>>> platform.python_implementation()
'CPython'
解决方案
我相信原因是因为在弹出项目后,for
尝试移动到下一个键值时循环失败。换句话说,错误发生在删除键值对之后。在这里查看答案。
推荐阅读
- reactjs - 无论如何要预先选择确切的下拉值?- 反应js +材料ui
- laravel - 包含刀片模板而不解释 html
- bluetooth - 商米v2 pro不能用蓝牙打印外接打印机
- angular - 如何在Angular中使用按钮和多选框运行相同的功能
- c# - C# streamReader ReadLine 在执行命令时卡住
- angular - 未捕获(承诺):TypeError:无法读取未定义的属性“fundTypes”
- mysql - Spark:以优化方式将数据集转换为其他数据集
- c# - c# 是否可以从 sftp 中存在的 zip 文件下载特定文件
- reactjs - 在 gatsby 中创建项目时使用“new”命令时出错
- python - 使用 Python 解码 Instagram based64 media_preview