温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - How to avoid "RuntimeError: dictionary changed size during iteration" error?
dictionary list loops python

python - 如何避免“ RuntimeError:字典在迭代过程中更改大小”错误?

发布于 2020-03-27 16:11:25

我已经检查了所有其他问题,但都没有发现相同的错误= /

我有一个列表字典:

d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}

其中某些值为空。在创建这些列表的最后,我想在返回字典之前删除这些空列表。当前,我正在尝试执行以下操作:

for i in d:
    if not d[i]:
        d.pop(i)

但是,这给了我运行时错误。我知道您无法在字典中进行迭代时添加/删除字典中的元素...那么解决该问题的方法是什么?

查看更多

查看更多

提问者
user1530318
被浏览
176
63.1k 2016-05-12 03:16

在Python 2.x中,调用keys会生成密钥的副本,您可以在修改时进行迭代dict

for i in d.keys():

请注意,这在Python 3.x中不起作用,因为它keys返回迭代器而不是列表。

另一种方法是使用list强制复制密钥。这也可以在Python 3.x中使用:

for i in list(d):