首页 > 编程问答 >使用列表理解过滤字典列表并处理 None 时,为什么会出现“NoneType 对象不可迭代”?

使用列表理解过滤字典列表并处理 None 时,为什么会出现“NoneType 对象不可迭代”?

时间:2024-07-20 22:13:05浏览次数:17  
标签:python list dictionary

在 Python 中,我使用列表理解来过滤带有键的字典列表。我正在处理 None 但仍然收到错误“NoneType 对象不可迭代”。我知道这一定是一件简单的事情,但我看不到。为什么仍然出错?

这是我重现问题的代码:

def process_data(data, key):
    return [
        {k: [v for v in val if v > 10] for k, val in item.items() if k == key}
        for item in data
        if item is not None
    ]

data = [
    {'values': [5, 15, 25]},
    None,
    {'values': [8, 12, 20]},
    {'values': None},
    {'values': [7, 14, 21]}
]

filtered_data = process_data(data, 'values')
print(filtered_data)

错误的原因在于,虽然你处理了 item None 的情况,但你没有处理 item['values'] None 的情况。 当代码遇到 {'values': None} 时,内部的列表推导式 [v for v in val if v > 10] 会尝试迭代 val ,而 val 此时是 None ,从而导致 "TypeError: 'NoneType' object is not iterable" 错误。

为了解决这个问题,你可以在内部列表推导式中也加入对 val 的判断:

def process_data(data, key):
    return [
        {k: [v for v in val if v is not None and v > 10] for k, val in item.items() if k == key}
        for item in data
        if item is not None
    ]

data = [
    {'values': [5, 15, 25]},
    None,
    {'values': [8, 12, 20]},
    {'values': None},
    {'values': [7, 14, 21]}
]

filtered_data = process_data(data, 'values')
print(filtered_data)

这样,如果 val None ,内部列表推导式就不会尝试对其进行迭代,从而避免了错误。

标签:python,list,dictionary
From: 78772221

相关文章

  • 使用 selenium 在 python 中打开 chrome 中的链接
    通过此链接https://bancadatistatisticaoas.inail.it/analytics/saw.dll?Dashboard&PortalPath=%2Fshared%2FBDS%2F_portal%2FINF_Definiti_Industria_e_Servizi我需要单击“FCostruzioni”,然后单击F41COSTRUZIONIED埃迪菲西。这是我的代码,但它不起作用。我做错了......
  • 七大排序算法的Python实现
    七大排序算法的Python实现1.冒泡排序(BubbleSort)算法思想冒泡排序通过重复交换相邻的未按顺序排列的元素来排序数组。每次迭代都将最大的元素“冒泡”到数组的末尾。复杂度分析时间复杂度:O(n^2)空间复杂度:O(1)defbubble_sort(arr):n=len(arr)for......
  • python反序列化
    之前hgame中遇到python反序列化,这次正好借分享会来尽可能详细学习一下python反序列化基础知识什么是序列化?反序列化?在很多时候为了方便对象传输,我们往往会把一些内容转化成更方便存储、传输的形式。我们把“对象->字符串”的翻译过程称为“序列化”;相应地,把“字符串->对......
  • 我在 python 项目中不断收到“无法识别图像文件中的数据”错误
    我正在尝试向我的TK窗口添加一个图标,但我不断收到一条错误消息:Traceback(mostrecentcalllast):File"C:\Users\roger\source\repos\PythonApplication\PythonApplication.py",line7,in<module>windowIcon=tk.PhotoImage(file="C:/Users/roger/Downloa......
  • Python学习笔记41:游戏篇之外星人入侵(二)
    前言在上一篇文章,我们已经创建好了项目目录,在今天,我们主要编写入口模块的功能。mainmain.py模块是我们游戏程序的入口,所有我们需要在模块中编写游戏主启动以及主页面相关的代码。当前我们的main模块是这样的,这是我们创建项目时默认生成一些代码,接下来我们就要进行我们......
  • Python学习笔记39:进阶篇(二十八)pygame的使用之按键映射及按键失效问题解决
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......
  • Python学习笔记40:游戏篇之外星人入侵(一)
    前言入门知识已经学完,常用标准库也了解了,pygame入门知识也学了,那么开始尝试小游戏的开发。当然这个小游戏属于比较简单的小游戏,复杂的游戏需要长时间的编写累计开发经验,同时也需要一定的时间才能编写出来。现在的话还是嫩了点。从基础的简单的开始,学习实践,慢慢的成长才......
  • Python学习笔记37:进阶篇(二十六)pygame的使用之输入处理
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......
  • Python学习笔记38:进阶篇(二十七)pygame的使用之时间与帧数控制
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......
  • 音频文件降噪及python示例
    操作系统:Windows10_x64Python版本:3.9.2noisereduce版本:3.0.2从事音频相关工作,大概率会碰到降噪问题,今天整理下之前学习音频文件降噪的笔记,并提供Audacity和python示例。我将从以下几个方面展开:noisereduce库介绍使用Audacity进行降噪使用fft滤波降噪使用noisereduce进......