【发布时间】:2014-11-21 12:18:17
【问题描述】:
我有一段 python 代码,它需要迭代字典中的所有键,其中循环的主体可能会改变字典。
只是想迭代字典给我RuntimeError: dictionary changed size during iteration。搜索错误消息将我带到another question,建议的解决方案是在开始迭代之前复制键列表。
在我的场景中,这只是部分答案,因为我不仅需要迭代原始键,还需要迭代在迭代时添加的键。我需要只有在没有更多键被添加到字典时才会终止的代码,并且它已经处理了字典中已经存在的任何键。
到目前为止,我想出了这个:
processed = set()
while True:
keys = set(dictionary) - processed
if not keys:
break
for k in keys:
processed.add(k)
# Do something with k
这种方法似乎过于复杂。有什么办法可以简化它,并且仍然让它处理所有添加到字典中的键,而不用多次处理它们?
在其他一些语言中,while 循环的前四行可以简单地写成:
while keys = set(dictionary) - processed:
但是,这在 python 中不起作用。我发现a question 在 python 的 while 循环中使用赋值作为条件。但建议的答案似乎都不适用于我的场景。
【问题讨论】:
标签: python