Python如何检索列表中嵌套字典的指定字段是否包含指定子串
Python 列表嵌套字典的指定字段子串匹配实现
需求说明
对元素为字典的列表,按指定字典字段做子串模糊匹配,筛选符合条件的条目,示例数据如下:
# 注意不要用list作为变量名,会覆盖Python内置关键字 data_list = [ {"name": "Tom", "age": 10}, {"name": "Sara", "age": 11}, {"name": "Mark", "age": 5}, {"name": "Pam", "age": 7} ]
基础实现(区分大小写)
直接使用列表推导式配合Python字符串in运算符即可实现,示例为筛选name字段包含子串ar的条目:
result = [item for item in data_list if "ar" in item.get("name", "")]
代码说明:
- 用
item.get("name", "")而非直接item["name"],是为了兼容部分字典不存在对应字段的场景,避免抛出KeyError,无对应字段的条目会直接被过滤 in运算符默认区分大小写,匹配结果为:[{'name': 'Sara', 'age': 11}, {'name': 'Mark', 'age': 5}]
扩展实现(支持不区分大小写)
如果需要忽略大小写匹配,可统一将匹配目标和字段值转为小写/大写后再判断:
target_sub = "AR" result = [item for item in data_list if target_sub.lower() in item.get("name", "").lower()]
通用封装函数
可封装为通用函数适配不同字段、不同匹配规则的场景:
def filter_by_substring(data: list[dict], field: str, substring: str, case_sensitive: bool = True) -> list[dict]: process_str = lambda s: s if case_sensitive else s.lower() target = process_str(substring) return [ item for item in data if target in process_str(item.get(field, "")) ] # 调用示例 # 区分大小写匹配 print(filter_by_substring(data_list, "name", "ar")) # 不区分大小写匹配 print(filter_by_substring(data_list, "name", "AR", case_sensitive=False))
内容的提问来源于stack exchange,提问作者MGG
相关产品推荐
相关产品推荐

