玩蛇网提供最新Python编程技术信息以及Python资源下载!

python删除dict空值元素报错RuntimeError原因

exam = { 'math': '95', 'eng': '96', 'chn': '90', 'phy': '', 'chem': '' }

使用下列遍历的方法删除:

for e in exam:
    if exam[e] == '':
        del exam[e]

结果出现下列错误,怎么解决:

Traceback (most recent call last):
  File "Untitled.py", line 3, in <module>
    for e in exam:
RuntimeError: dictionary changed size during iteration
for k, v in exam.items():
    if not v: exam.pop(k)

在使用迭代器遍历的过程中不能删除、添加数据

先记录要删除的元素的索引,遍历完后再删除

dict(filter(lambda x: x[1] != '', exam.items()))
for e in exam.keys():
    if exam[e] == '':
        del exam[e]
for e in exam:

使用的是迭代器,它等于:

>>> exam = { 'math': '95', 'eng': '96', 'chn': '90', 'phy': '', 'chem': '' }
>>> fetch = iter(exam)
>>> while True:
...     try:
...         key = fetch.next()
...     except StopIteration:
...         break
...     if exam[key] == '':
...         del exam[key]
... 

只是在for循环中,它会自动调用next方法!

字典的迭代器会遍历它的键,在这个过程中,不能改变这个字典!exam.keys()返回的是一个独立的列表。

下面是来自PEP234的snapshot:

Dictionaries implement a tp_iter slot that returns an efficient
iterator that iterates over the keys of the dictionary. During
such an iteration, the dictionary should not be modified, except
that setting the value for an existing key is allowed (deletions or additions are not, nor is the update() method).

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd20374.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月31日 - 11时03分03秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules