[英]How to avoid "RuntimeError: dictionary changed size during iteration" error?
[英]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.