如何通过字符串匹配查找Python字典中含指定子串的特定键
问题原因与修正方案
错误点
- 首先
key.startswith(key)是无意义判断:任何字符串都满足以自身为前缀,这个表达式永远返回True - 后续的
True in all_keys逻辑错误:all_keys的键均为字符串类型,布尔值不可能匹配到对应的键,整个if判断逻辑完全不符合需求,且本身是多余的 - 原判断逻辑完全写反:你要校验的是
all_keys中的键是否匹配general_key_array里的前缀,而非校验前缀本身
修正方案
如果需求是遍历general_key_array中的每个匹配规则,筛选all_keys中符合规则的键值对,存入general_keys,直接去掉错误的if判断即可,修正后代码如下:
general_keys = dict() all_keys = {'activity': 'ins','install': 'all','aws.a': 'data', 'aws.b': 'data1', 'aws.c': 'data2'} general_key_array = ['install', 'aws.'] for key in general_key_array: # 直接按规则筛选,不需要多余的if判断 general_keys[key] = dict(filter(lambda item: key in item[0], all_keys.items()))
如果需要严格匹配前缀而非包含子串,把lambda里的判断改成item[0].startswith(key)即可:
general_keys[key] = dict(filter(lambda item: item[0].startswith(key), all_keys.items()))
运行后general_keys的输出结果为:
{'install': {'install': 'all'}, 'aws.': {'aws.a': 'data', 'aws.b': 'data1', 'aws.c': 'data2'}}
完全符合筛选包含aws.子串项的需求。
内容的提问来源于stack exchange,提问作者cannierhesh
相关产品推荐
相关产品推荐

