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

Python及pandas中删除值为null的字典键遇迭代报错如何解决

解决方案

报错原因

  • 第一次触发RuntimeError: dictionary changed size during iteration:因为你在迭代字典本身的键视图过程中删除了字典的键,Python禁止在遍历字典原生元素的同时修改字典大小。
  • 第二次触发AttributeError: 'list' object has no attribute 'items':你的dicties是存储多个字典的列表,只有字典对象支持items()方法,列表没有该方法,直接调用必然报错。

纯Python实现方案

你可以预先定义需要处理的指定键列表,迭代这个固定的外部列表来操作字典,完全避开迭代字典本身的问题,示例代码如下:

# 待处理的字典列表示例
dicties = [
    {'number1': '123', 'number2': None, 'other': 'test'},
    {'number1': None, 'number2': '456', 'other': 'abc'}
]
# 定义需要处理的指定键
process_keys = ['number1', 'number2']

for d in dicties:
    for key in process_keys:
        # 先判断键是否存在,避免抛出KeyError
        if key not in d:
            continue
        current_val = d[key]
        if current_val is None:
            # 值为null直接删除键
            del d[key]
        else:
            # 非null转成int类型
            d[key] = int(current_val)

pandas实现方案

如果你已经在使用pandas,也可以通过DataFrame批量处理后再转回字典列表,代码更简洁:

import pandas as pd

dicties = [
    {'number1': '123', 'number2': None, 'other': 'test'},
    {'number1': None, 'number2': '456', 'other': 'abc'}
]
process_keys = ['number1', 'number2']

# 字典列表转DataFrame
df = pd.DataFrame(dicties)
# 指定列转数值类型,非法值和空值转NaN
df[process_keys] = df[process_keys].apply(pd.to_numeric, errors='coerce')
# 转成字典列表
result = df.to_dict('records')
# 删除每个字典中值为NaN的指定键
for d in result:
    for key in process_keys:
        if pd.isna(d.get(key)):
            del d[key]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:03