如何在Python中对字典列表进行任意字符模糊搜索?
实现Python字典列表的模糊搜索
你的核心需求是把原来的精确匹配改成子串模糊匹配,需要遍历每个字典的所有值,将值和关键词统一转为字符串后检查子串是否存在。以下是具体实现:
代码示例
my_list = [ {"name": "MrA", "age": 20, "height": 185}, {"name": "MrsB", "age": 28, "height": 192}, {"name": "MrC", "age": 18, "height": 170}, {"name": "MrD", "age": 50, "height": 177}, {"name": "MrsE", "age": 32, "height": 200}, {"name": "Mrs18F", "age": 21, "height": 175} ] # 定义搜索关键词(可以是字符串或数字) keywords = "Mrs" # keywords = 18 # 统一将关键词转为字符串,兼容数字/字符串类型的搜索 keywords_str = str(keywords) # 模糊搜索逻辑:遍历每个字典,只要任意值转字符串后包含关键词就保留 result = [ item for item in my_list if any(keywords_str in str(value) for value in item.values()) ] print(result)
逻辑说明
- 统一类型:把关键词转成字符串,不管输入是数字(如
18)还是字符串(如"Mrs"),都能处理;同时把每个字典的值也转成字符串,确保数字类型的字段(如age、height)也能被搜索到。 - 任意字段匹配:用
any()函数判断,只要字典里有一个字段的值包含关键词,就将该字典加入结果列表。
测试结果
- 当
keywords = "Mrs"时,输出符合预期:[{"name": "MrsB", "age": 28, "height": 192}, {"name": "MrsE", "age": 32, "height": 200}, {"name": "Mrs18F", "age": 21, "height": 175}] - 当
keywords = 18时,输出符合预期:[{"name": "MrA", "age": 20, "height": 185}, {"name": "MrC", "age": 18, "height": 170}, {"name": "Mrs18F", "age": 21, "height": 175}]
可选优化(忽略大小写)
如果需要不区分大小写的搜索,可以把关键词和值都转成小写:
keywords_str = str(keywords).lower() result = [ item for item in my_list if any(keywords_str in str(value).lower() for value in item.values()) ]
内容的提问来源于stack exchange,提问作者Alain Skyter
相关产品推荐
相关产品推荐

