You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免RuntimeError: dictionary changed size during iteration或不使用.pop()实现需求

解决字典遍历修改引发的RuntimeError问题

问题原因

在遍历字典的同时使用pop()删除键,会改变字典的长度和结构,Python会因此抛出RuntimeError——因为遍历过程中不允许修改字典的大小。

方法一:遍历字典键的副本(保留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 list(flavors.keys()):
  if flavors[i] == False:
    flavors.pop(i)

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

方法二:不使用pop(),直接生成新结果集

更简洁高效的方式是通过推导式直接筛选符合条件的口味,无需修改原字典:

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

# 生成只包含获胜口味的新字典
winning_flavors = {flavor: score for flavor, score in flavors.items() if score >= 3}
print("Release (dict):")
print(winning_flavors.keys())

# 直接生成获胜口味的列表
winning_flavor_list = [flavor for flavor, score in flavors.items() if score >= 3]
print("Release (list):")
print(winning_flavor_list)

这种方式还能省去将评分转换为True/False的步骤,直接基于原始评分筛选,代码更精简。

内容的提问来源于stack exchange,提问作者Vladlena Malenkova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:10:26