Python3:
>>> def a(para):
>>> for k in para.keys():
>>> para.pop(k) # 或者del para[k]
>>> print(k)
>>> a({'a':1})
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-71-9a5ca586de9e> in <module>
----> 1 a({'a':1})
<ipython-input-69-66ab94e5931e> in a(para)
1 def a(para):
----> 2 for k in para.keys():
3 para.pop(k)
4 print(k)
RuntimeError: dictionary changed size during iteration
Python2:
>>> def a(para):
>>> for k in para.keys():
>>> para.pop(k) # 或者del para[k]
>>> print(k)
>>> a({'a':1})
a
正常
以上问题出现的原因是在Python2中字典调用keys方法会返回keys的列表拷贝
>>> a({'a':1})
>>> a = {}
>>> a.keys()
[]
而Python3中则返回的是一个迭代器
>>> a = {}
>>> a.keys()
dict_keys([])
在迭代过程中修改字典结构会导致迭代器失效,如果必须要在迭代过程中修改字典结构则可以将迭代器转化为列表:
>>> def a(para):
>>> for k in list(para.keys()):
>>> para.pop(k) # 或者del para[k]
>>> print(k)
>>> a({'a':1})
a
本文探讨了在Python 2和Python 3中遍历字典并同时删除元素的行为差异。在Python 3中直接操作会导致运行时错误,而Python 2则能正常执行。为解决此问题,提供了一种通用的方法——将字典的keys转换为列表。
2122





