Python中如何忽略特殊值判断字典列表其余值是否全部相同
忽略特殊值后判断剩余status是否全部相同
先把特殊值过滤掉,再判断剩下的状态是否一致就行,给你两种简单的实现方式:
方法一:列表推导式+all()
先筛选出非特殊值的状态,再用all()逐个对比第一个有效状态:
statuses = [ {"status": "active"}, {"status": "active"}, {"status": "active"}, {"status": "active"}, {"status": "unknown"}, {"status": "none"}, ] special_values = {"unknown", "none"} valid_statuses = [s["status"] for s in statuses if s["status"] not in special_values] # 处理没有有效状态的情况(比如全是特殊值) if not valid_statuses: # 这里可根据业务需求返回True或False,示例默认返回True all_same = True else: all_same = all(status == valid_statuses[0] for status in valid_statuses) print(all_same) # 输出:True
方法二:集合去重
利用集合自动去重的特性,只要去重后的长度≤1,就说明所有有效状态都相同:
statuses = [ {"status": "active"}, {"status": "active"}, {"status": "active"}, {"status": "active"}, {"status": "unknown"}, {"status": "none"}, ] special_values = {"unknown", "none"} valid_statuses = [s["status"] for s in statuses if s["status"] not in special_values] all_same = len(set(valid_statuses)) <= 1 print(all_same) # 输出:True
边界情况说明
- 如果所有状态都是特殊值(
valid_statuses为空),集合方法会返回True;若需要这种情况返回False,可修改为:all_same = len(set(valid_statuses)) <= 1 and len(valid_statuses) > 0 - 若有效状态里存在不同值(比如混了"active"和"inactive"),两种方法都会返回
False - 只有一个有效状态时,两种方法都返回
True
内容的提问来源于stack exchange,提问作者MariaP
相关产品推荐
相关产品推荐

