Python如何合并if与for条件,单次遍历字典提取符合要求的主机信息
问题解决方案
实现说明
- 你需要的两类校验逻辑完全可以在单次遍历
host_data.items()的过程中完成,无需两次遍历外层字典 - 你当前代码只有else分支执行的常见原因:
- 主机的
env字段实际值都落在你定义的ENV列表范围内 - 代码中匹配的
software_id值和实际数据中的值不一致(示例数据中id为xxxx,你的代码写的是xxxxxxx,多了3位字符)
- 主机的
优化后代码
ENV = ['production', 'test'] TARGET_SOFTWARE_ID = 'xxxx' # 替换成你实际要匹配的软件id MIN_VERSION = (6,) for host, data in host_data.items(): # 第一类:不属于指定环境的主机,直接输出 if data['env'] not in ENV: print(host, data['env']) # 不需要校验软件版本的话直接进入下一个主机循环 continue # 第二类:属于指定环境,校验指定软件版本 for sw_item in data['sw']: if sw_item['software_id'] is None: print(host, data['sw']) continue if sw_item['software_id'] == TARGET_SOFTWARE_ID: if version_tuple(sw_item['software_version']) < MIN_VERSION: print(host, sw_item['software_version'])
代码优化点说明
- 把固定的匹配参数抽成了常量,方便后续修改维护
- 遍历软件列表时直接迭代元素,不需要用
range(len())索引访问,代码更简洁 - 用
continue减少嵌套层级,可读性更高
内容的提问来源于stack exchange,提问作者danidar
相关产品推荐
相关产品推荐

