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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:51:04