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

Python中如何从字典列表删除值为nan/null/空的键值对

问题原因分析
  • 空值判断逻辑错误:Python中的nan是float类型的特殊值,不是字符串'nan',且nan不与任何值相等(包括自身),无法通过== 'nan'或is 'nan'判断,必须使用math.isnan()或者pandas.isna()这类专用方法判断。
  • 遍历层级错误:需要删除的空值存放在address字段对应的列表内层的子字典中,第一种方法直接遍历最外层字典,触达不到需要清理的子字典层级。
  • 变量使用错误:第二种代码中address_dic[address]的address是未定义的变量,正确写法应该是address_dic['address'],取key为字符串'address'的取值。
  • 迭代风险:如果直接遍历原字典的items()同时执行删除操作,会触发迭代器异常,需要先把items转成列表再遍历,或者生成新的过滤后的字典。
正确实现代码

如果仅需要处理nan、None、空字符串场景,可以用原生math模块实现:

import math

# 遍历address列表下的每个地址子字典
for addr_item in address_dic['address']:
    # 先将items转成列表再遍历,避免修改原字典触发迭代异常
    for key, value in list(addr_item.items()):
        # 同时判断nan、None、空字符串三类无效值
        if (isinstance(value, float) and math.isnan(value)) or value is None or value == '':
            del addr_item[key]

如果你的项目已经引入pandas,可以用pd.isna()兼容更多空值类型(包括nan、None、NaT等),代码更简洁:

import pandas as pd

for addr_item in address_dic['address']:
    for key, value in list(addr_item.items()):
        if pd.isna(value) or value == '':
            del addr_item[key]

运行以上代码后即可得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:42:03