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

Python中如何删除字典的空字符串键 避免迭代时字典大小变化报错

Python遍历字典删除条目出现RuntimeError的原因及解决方法

报错原因

你出现报错的核心原因是遍历字典的items()/keys()/values()视图对象时,直接修改了原字典的大小(增/删条目)。Python的字典视图对象是和原字典动态关联的,迭代过程中如果原字典长度变化,迭代器的状态就会异常,因此会抛出RuntimeError: dictionary changed size during iteration。

正确实现方案

方案1:直接生成新字典(推荐,不修改原字典)

用字典推导式一步完成筛选,不需要修改原字典,也不会触发迭代异常,完全符合「生成不包含空键条目的新字典」的需求:

data = {'id': '213', 'first_name': 'john', 'last_name': 'doe', '': ''}
# 筛选所有键不为空的条目生成新字典
new_data = {k: v for k, v in data.items() if k != ""}
print(new_data)

运行输出:

{'id': '213', 'first_name': 'john', 'last_name': 'doe'}

如果字典值包含可变对象需要深拷贝,再结合deepcopy处理即可,普通字符串、数字等不可变值的场景下不需要额外拷贝。

方案2:需要修改原字典的场景

如果确实需要在原字典上删除空键,遍历前先把键转为静态列表,避免遍历动态视图对象:

from copy import deepcopy

data = {'id': '213', 'first_name': 'john', 'last_name': 'doe', '': ''}
# 先将键转为固定列表,遍历的是静态列表不会受原字典修改影响
for k in list(data.keys()):
    if k == "":
        del data[k]

new_data = deepcopy(data)
print(new_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:06:03