繁体   English   中英

如何避免“RuntimeError: dictionary changed size during iteration”或者在没有.pop()的情况下得到结果

[英]How to avoid "RuntimeError: dictionary changed size during iteration" or get result without .pop()

我有新口味的评级:

flavors = {"cinnamon": 4, "pumpkin": 2.5, "apple pie": 3}
print("New flavors:")
print(flavors)

for i in flavors:
  if flavors[i] >= 3:
    flavors[i] = True
  else:
    flavors[i] = False

print("Results:")
print(flavors)

我想要获得获胜口味的列表:

for i in flavors:
  if flavors[i] == False:
    flavors.pop(i)

print("Release:")
print(flavors.keys())

我可以在没有 .pop() 的情况下获得发布列表或避免 RuntimeError 吗?

在遍历字典时不能更改它的键。 为了您的目的,您可以使用列表理解来构建评分大于或等于 3 的口味列表:

[flavor for flavor, rating in flavors.items() if rating >= 3]

遍历字典时不能更改字典的键。

对代码的一个简单修复是使用for i in list(flavors):而不是for i in flavors:在第二个循环中删除内容)。 基本上你创建一个键列表(新对象),而不是字典,你遍历这个列表。 现在可以操作原始字典了。

附加说明:在以前的 Python 版本中(例如 3.7.4),只要字典的大小不变,它就允许更改键。 例如,当你遍历字典时,你弹出一些东西,然后在下一次迭代之前,你添加另一个键。 总的来说这是错误的,现在在我当前的解释器 (3.10.6) 中它不允许您更改密钥。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM