You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:36:37