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
相关产品推荐
相关产品推荐

