Python 高效校验字典列表指定键取特定值时另一键值是否合规
简洁高效的标准实现
这类列表元素规则校验场景,Python 内置的 all() 函数是最优选择,它原生支持短路求值,遇到第一个不符合规则的元素就会立刻终止遍历返回结果,不需要遍历完整列表,性能最优,代码可读性也最高。
核心实现代码:
def validate_cond_list(data: list[dict]) -> bool: return all( entry.get("medical") == "any" for entry in data if entry.get("cond_name") == "Cond1" )
实现说明
- 用生成器表达式作为
all()的入参,没有额外的中间列表生成,内存占用极低 - 用
dict.get()替代直接键索引,避免条目缺失cond_name或medical字段时抛出KeyError:- 条目无
cond_name字段时,get()返回None,不会命中Cond1的校验条件,直接跳过 - 条目
cond_name为Cond1但无medical字段时,get("medical")返回None,和要求值any不相等,直接判定校验失败,符合常规业务校验的容错逻辑
- 条目无
- 仅对
cond_name为Cond1的条目做校验,其余条目的任意字段取值都不影响结果,完全匹配需求
效果验证
用给出的示例数据测试:
test_data = [ {'cond_name': 'Cond1', 'rand': 'idk', 'medical': 'any'}, {'cond_name': 'Cond2', 'rand': 'idk', 'medical': 'any'}, {'cond_name': 'Cond1', 'rand': 'different', 'medical': 'something'}, {'cond_name': 'Cond1', 'rand': 'mine', 'medical': 'any'} ] print(validate_cond_list(test_data)) # 输出False,符合预期
可扩展版本
如果后续需要新增更多同类校验规则(比如Cond2要求medical为特定值),可以改成规则配置化的写法,后续只需要修改规则字典,不需要调整校验逻辑:
# 校验规则映射:key为cond_name取值,value为对应要求的medical取值 COND_VALID_RULES = { "Cond1": "any" } def validate_cond_list(data: list[dict]) -> bool: return all( entry.get("medical") == required_val for entry in data if (required_val := COND_VALID_RULES.get(entry.get("cond_name"))) is not None )
内容的提问来源于stack exchange,提问作者Prospero
相关产品推荐
相关产品推荐

