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

Python3.10检查列表值是否存在于YAML文件时结果不符预期

逻辑错误排查

原有代码存在三个核心逻辑问题,导致无法正确匹配:

  1. YAML结构解析错误:加载后的catalog是顶层字典,只有services一个键,对应的值是服务列表,列表内的元素才是存储版本信息的单个服务字典。原有代码直接判断版本字符串是否在services列表中,而列表的直接元素是字典而非字符串,永远不可能匹配成功。
  2. 输出逻辑冗余:原有代码嵌套遍历每个版本、每个顶层键,会产生多余的打印输出,无法做到每个待检查版本只输出一次结果。
  3. 字段兼容遗漏:YAML中的服务同时使用version和revision两个字段存储版本标识,原有逻辑没有针对性提取这两个字段的值。
修正方案

提前提取YAML中所有有效版本值存入集合,再逐个比对待检查列表,修正后代码如下:

import yaml

versions_list = ["0.1.0-3572c21", "0.1.1", "0.0.2"]
# 用集合存储已存在的版本,查找效率更高
existing_versions = set()

with open('versions.yaml', 'r', encoding='utf-8') as file:
    catalog = yaml.safe_load(file)

# 遍历服务列表,提取所有版本标识
for service in catalog.get('services', []):
    # 同时收集version和revision字段的值
    if 'version' in service:
        existing_versions.add(service['version'])
    if 'revision' in service:
        existing_versions.add(service['revision'])

# 逐个检查目标版本,每个版本仅输出一次结果
for version in versions_list:
    print("found!!!" if version in existing_versions else "not found!!!")

运行上述代码,将得到预期输出:

found!!!
not found!!!
not found!!!

内容的提问来源于stack exchange,提问作者jrz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 22:51:07