【发布时间】:2017-11-02 07:49:34
【问题描述】:
当我使用生成器时,即使我修改了传递给它的字典,生成器仍然给我一个旧数据结构的结果。 我该如何解决这个问题?
def min_key_order(adict:dict):
for key, value in sorted(adict.items()):
yield (key, value)
d = {1:'a', 2:'x', 4:'m', 8:'d', 16:'f'}
i = min_key_order(d)
print(next(i))
d.pop(2)
print(next(i))
它给了我(1,'a'),(2,'x'),即使我有字典中的弹出键 2。
【问题讨论】:
-
您不能遍历您更改的字典。这是不受支持的行为。
-
但是,
sorted()函数会生成一个新列表;该列表不会随着原始词典的变化而更新。 -
这些都与生成器无关,如果将
d.pop()放在for循环中sorted(d)上,则会得到相同的行为。
标签: python dictionary generator