Python中如何使用多个键搜索字典列表实现多条件筛选
Python字典列表多条件筛选方案
场景对应最简实现
直接通过列表推导式叠加多个匹配条件即可:
# 你的原始数据 data = [ {"name": "John", "surname": "Doe", "age": 20}, {"name": "Anna", "surname": "Smith", "age": 20}, {"name": "John", "surname": "Doe", "age": 22}, ] # 多条件筛选,多个条件用and连接 filtered_data = [item for item in data if item["name"] == "John" and item["surname"] == "Doe"]
运行后filtered_data就是你需要的输出结果。
通用多条件封装(支持任意数量匹配键)
如果后续需要适配更多匹配条件,可以封装为通用函数,无需重复修改判断逻辑:
from typing import List, Dict def filter_dict_list(data: List[Dict], match_rules: Dict) -> List[Dict]: """ 从字典列表中筛选出匹配所有规则的字典 :param data: 待筛选的字典列表 :param match_rules: 匹配规则,键为需要匹配的字典key,值为对应的目标值 """ return [ item for item in data # all()会判断所有规则都满足才返回True,任意条件不匹配直接终止当前项判断 if all(item.get(key) == value for key, value in match_rules.items()) ]
调用示例:
# 传入需要匹配的任意数量规则即可 rules = {"name": "John", "surname": "Doe"} filtered_data = filter_dict_list(data, rules)
补充说明
- 若你能确定所有待筛选的字典都包含需要匹配的key,可以把
item.get(key)替换为item[key],执行效率略高;如果存在缺key的情况,item.get(key)会返回None,不会抛出异常,自动判定为不匹配。 - 若需要实现或逻辑匹配(满足任意一个条件即可),把代码中的
all()替换为any()即可。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

