我已经检查了所有其他问题,但都没有发现相同的错误= /
我有一个列表字典:
d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}
其中某些值为空。在创建这些列表的最后,我想在返回字典之前删除这些空列表。当前,我正在尝试执行以下操作:
for i in d: if not d[i]: d.pop(i)
但是,这给了我运行时错误。我知道您无法在字典中进行迭代时添加/删除字典中的元素...那么解决该问题的方法是什么?
查看更多
在Python 2.x中,调用keys会生成密钥的副本,您可以在修改时进行迭代dict:
keys
dict
for i in d.keys():
请注意,这在Python 3.x中不起作用,因为它keys返回迭代器而不是列表。
另一种方法是使用list强制复制密钥。这也可以在Python 3.x中使用:
list
for i in list(d):
我相信你的意思是“调用
keys
使得副本钥匙,你可以遍历”又名plural
右方向键?否则,如何遍历单个键?顺便说一句,我不是挑剔的人,我真的很想知道那是否确实是关键或用元组代替列表,因为它更快。
为了阐明python 3.x的行为,d.keys()返回一个可迭代(而不是迭代器),这意味着它是直接在字典键上的视图。一般而言,using
for i in d.keys()
确实可以在python 3.x 中工作,但由于它正在对字典键的可迭代视图进行迭代,因此d.pop()
在循环期间进行调用会导致与您发现的错误相同的错误。for i in list(d)
在某些特殊情况下,模拟在迭代之前将键复制到列表中的python 2稍微低效的行为。