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

Python中使用for循环与if语句删除字典值为45的键值对问题

正确实现方法

你的代码运行时会抛出RuntimeError,原因是遍历字典的同时直接删除键值对,会改变字典的大小,导致迭代器无法正常工作。以下是几种可行的解决方案:

方法1:遍历字典键的副本

通过list(this_dict.keys())生成原字典键的静态列表,遍历这个列表时,原字典的修改不会影响遍历过程:

this_dict = {
    "dogs val":45, "sheep val":475, "cats val":33, "fish val":425, "crab val":11, "monkey val":45, "shark val":45,
    "badger val":45,"octopus val":55,"cheetah val":45,"owl val":656
}

for key in list(this_dict.keys()):
    if this_dict[key] == 45:
        del this_dict[key]

print(this_dict)

方法2:使用字典推导式(推荐)

直接生成一个新字典,过滤掉值为45的键值对,代码简洁且效率高:

this_dict = {
    "dogs val":45, "sheep val":475, "cats val":33, "fish val":425, "crab val":11, "monkey val":45, "shark val":45,
    "badger val":45,"octopus val":55,"cheetah val":45,"owl val":656
}

this_dict = {k: v for k, v in this_dict.items() if v != 45}

print(this_dict)

方法3:先收集要删除的键,再批量删除

先遍历字典收集所有值为45的键,再遍历这个键列表删除对应项,避免遍历过程中修改字典:

this_dict = {
    "dogs val":45, "sheep val":475, "cats val":33, "fish val":425, "crab val":11, "monkey val":45, "shark val":45,
    "badger val":45,"octopus val":55,"cheetah val":45,"owl val":656
}

keys_to_delete = [k for k, v in this_dict.items() if v == 45]
for key in keys_to_delete:
    del this_dict[key]

print(this_dict)

三种方法最终都会得到相同的结果:

{'sheep val': 475, 'cats val': 33, 'fish val': 425, 'crab val': 11, 'octopus val': 55, 'owl val': 656}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:20:30