如何筛选列表中value字段非None的字典元素并返回结果列表?
筛选列表中value不为None的元素
原始列表
[{"value": 19, "datetime": "2021-01-01T00:30:00Z"}, {"value": None, "datetime": "2021-01-01T00:40:00Z"}, {"value": None, "datetime": "2021-01-01T00:50:00Z"}, {"value": None, "datetime": "2021-01-01T00:55:00Z"}]
需求
筛选出其中value字段不为None的元素,组成新列表返回,期望输出:
[{"value": 19, "datetime": "2021-01-01T00:30:00Z"}]
你尝试的代码
def do_something(): for li in my_list: if li['value']: print(li)
问题分析与正确实现
你的代码存在两个问题:
- 判断条件
if li['value']会过滤所有布尔值为False的value(比如0、空字符串等),但我们只需要排除None; - 函数仅打印符合条件的元素,没有将它们收集成新列表返回。
方式一:循环构建新列表
def filter_non_none_values(my_list): filtered = [] for item in my_list: # 明确判断value不是None if item['value'] is not None: filtered.append(item) return filtered # 调用示例 my_list = [{"value": 19, "datetime": "2021-01-01T00:30:00Z"}, {"value": None, "datetime": "2021-01-01T00:40:00Z"}, {"value": None, "datetime": "2021-01-01T00:50:00Z"}, {"value": None, "datetime": "2021-01-01T00:55:00Z"}] result = filter_non_none_values(my_list) print(result)
方式二:列表推导式(更简洁)
Python的列表推导式可以一行完成筛选,代码更简洁高效:
my_list = [{"value": 19, "datetime": "2021-01-01T00:30:00Z"}, {"value": None, "datetime": "2021-01-01T00:40:00Z"}, {"value": None, "datetime": "2021-01-01T00:50:00Z"}, {"value": None, "datetime": "2021-01-01T00:55:00Z"}] filtered_list = [item for item in my_list if item['value'] is not None] print(filtered_list)
两种方式运行后都会得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Data_User
相关产品推荐
相关产品推荐

