Python3.10检查列表值是否存在于YAML文件时结果不符预期
逻辑错误排查
原有代码存在三个核心逻辑问题,导致无法正确匹配:
- YAML结构解析错误:加载后的
catalog是顶层字典,只有services一个键,对应的值是服务列表,列表内的元素才是存储版本信息的单个服务字典。原有代码直接判断版本字符串是否在services列表中,而列表的直接元素是字典而非字符串,永远不可能匹配成功。 - 输出逻辑冗余:原有代码嵌套遍历每个版本、每个顶层键,会产生多余的打印输出,无法做到每个待检查版本只输出一次结果。
- 字段兼容遗漏: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
相关产品推荐
相关产品推荐

