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

Python:如何用for循环筛选字典列表并计算有效元素长度

解决方案

首先注意你的字典列表存在一个语法错误:第四个字典中'field_name': 'place'末尾缺少逗号,运行前需要修正,否则会抛出语法异常。

针对你的需求,其实lambda函数完全可以同时判断多个条件——lambda的参数是列表中的单个字典元素,你可以通过这个参数同时访问字典里的field_name和field_value,用逻辑运算符组合判断条件即可。

方法1:使用filter() + lambda

original_list = [
    {'field_name': 'mobile', 'field_value': '8888888822', 'type': 'primary'},
    {'field_name': 'name', 'field_value': 'putta', 'type': 'primary'},
    {'field_name': 'job', 'field_value': 'Student', 'type': 'primary'},
    {'field_name': 'place', 'field_value': 'xyz', 'type': 'primary'},  # 修正了缺失的逗号
    {'field_name': 'vilage', 'field_value': '', 'type': 'primary'}
]

filtered_list = list(filter(
    lambda item: item['field_name'] not in {'job', 'place'} and item['field_value'].strip() != '',
    original_list
))

print(len(filtered_list))  # 输出:2
print(filtered_list)

方法2:使用列表推导式(更直观高效)

如果觉得lambda写法不够清晰,也可以用列表推导式实现相同逻辑:

filtered_list = [
    item for item in original_list
    if item['field_name'] not in {'job', 'place'} and item['field_value'].strip() != ''
]

逻辑说明

两个方法的核心判断逻辑一致:

  • 排除field_name为job或place的元素:item['field_name'] not in {'job', 'place'}(用集合做成员判断效率更高)
  • 排除field_value为空的元素:item['field_value'].strip() != ''(用strip()是为了同时过滤纯空格的空值,如果不需要可以直接写item['field_value'] != '')

最终过滤后的列表会保留mobile和name对应的两个元素,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:40:24