如何在Python中筛选列表内匹配关键词的数据
解决方法
你的代码存在几个问题:
- 变量名大小写不统一:定义的是
Key = ['ea'],但判断时用了key,会触发NameError - 逻辑偏离需求:你把每个元素的
Name存入newlst,但最终需要保留完整的字典对象,而不是只存名字;而且嵌套循环会重复检查之前加入的元素,完全没必要
直接用列表推导式就能简洁实现需求,或者用普通循环筛选:
方法一:列表推导式(推荐)
lst = [{'Name': 'an1-cs-ea-Primary-Asg', 'Region': 'us-east-2'},{'Name': 'an1-cs-ea-Secondary-Asg', 'Region': 'us-east-2'},{'Name': 'an1-te1-atrmm-Asg', 'Region': 'us-east-2'}] keys = ['ea'] # 筛选Name包含任意一个关键词的字典 op = [item for item in lst if any(key in item['Name'] for key in keys)] print(op)
方法二:普通循环
lst = [{'Name': 'an1-cs-ea-Primary-Asg', 'Region': 'us-east-2'},{'Name': 'an1-cs-ea-Secondary-Asg', 'Region': 'us-east-2'},{'Name': 'an1-te1-atrmm-Asg', 'Region': 'us-east-2'}] keys = ['ea'] op = [] for item in lst: # 检查当前字典的Name是否包含任意关键词 for key in keys: if key in item['Name']: op.append(item) break # 找到匹配就停止检查其他关键词 print(op)
两种方法输出都符合你的期望:
[{'Name': 'an1-cs-ea-Primary-Asg', 'Region': 'us-east-2'}, {'Name': 'an1-cs-ea-Secondary-Asg', 'Region': 'us-east-2'}]
内容的提问来源于stack exchange,提问作者Thentu matcha
相关产品推荐
相关产品推荐

