Python中如何检查字典列表中是否存在指定键值对组合
问题排查与修正方案
1. 核心逻辑错误
你代码里的判断逻辑完全颠倒了:
any(...)函数的作用是:只要迭代器中有任意一个元素为True,就返回True;所有元素都是False时返回False。- 你写的
if not any(...),意思是「当没有任何字典符合stage_one='Started'且stage_two='Complete123'的条件时」,输出“values exists”——这和你实际想要的“存在则输出存在,不存在则输出不存在”完全相反。
2. 数据语法错误
你的data列表中,每个字典的结尾用了),这是语法错误,应该改成},否则代码会直接报错无法运行。
修正后的完整代码
首先修正数据格式:
data = [ {'transaction':'abc123', 'stage_one':'Started', 'stage_two':'Complete', 'version': 12}, {'transaction':'abc123', 'stage_one':'Started', 'stage_two':'started', 'version': 12}, {'transaction':'abc123', 'stage_one':'Started', 'stage_two':'processing', 'version': 12}, {'transaction':'abc123', 'stage_one':'Started', 'stage_two':'Complete', 'version': 12} ]
然后修正判断逻辑:
# 检查是否存在目标键值对组合 if any(d['stage_one'] == 'Started' and d['stage_two'] == 'Complete123' for d in data): print("values exists") else: print("values don't exists")
如果需要更严谨(避免字典中缺少stage_one或stage_two键导致报错),可以添加键存在的判断:
if any( 'stage_one' in d and 'stage_two' in d and d['stage_one'] == 'Started' and d['stage_two'] == 'Complete123' for d in data ): print("values exists") else: print("values don't exists")
内容的提问来源于stack exchange,提问作者user29496
相关产品推荐
相关产品推荐

