Python合并多个if和for条件

2024-09-28 21:14:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在检查字典中的数据,需要提取不同的项目:

位于特定环境中的主机

具有低于x的特定软件的主机

我可以在字典项上循环两次,但无法合并这两个if条件

这就是dict的样子:

host_data = {'dev8': {'sw': [{'software_id': 'xxxx', 'software_version': 'xx'}, {'software_id': 'yyyy', 'software_version': 'zzz'}], 'env': 'dev'}}

这是我到目前为止所拥有的,但它并没有达到我想要的效果,只是执行了“else”

ENV = ['production', 'test']
for host,data in host_data.items():
     if data['env'] not in ENV:
        print (host, data['env'])
     else:
        for item in range(len(data['sw'])):
             if data['sw'][item]['software_id'] is None:
                print(host, data['sw'])
             elif data['sw'][item]['software_id'] == 'xxxxxxx':
                  if version_tuple(data['sw'][item]['software_version']) < (6,):
                      print (host, data['sw'][item]['software_version'])

是否可以合并并只在字典项上循环一次到目前为止,我有两个for循环在host_data.items()


Tags: inenvidhostfordataif字典
1条回答
网友
1楼 · 发布于 2024-09-28 21:14:30

您没有在dict项上循环两次,这些是嵌套循环。 第一个for host, data in host_data.items()将只覆盖一个项目(dev8及其对应的dict值)。 另一个循环在sw内经过dict,这是无法简化的

但是,循环中的代码可以:

host_data = {
    'dev8': {
        'sw': [{'software_id': 'xxxx', 'software_version': 'xx'},
               {'software_id': 'yyyy', 'software_version': 'zzz'}],
        'env': 'dev'}
}

ENV = ['production', 'test']

for host, data in host_data.items():
    if data['env'] not in ENV:
        print(host, data['env'])

    else:
        for sw_item in data['sw']:
            if sw_item['software_id'] is None: 
                print(host, data['sw'])

            elif sw_item['software_id'] == 'xxxxxxx' \
                    and version_tuple(sw_item['software_version']) < (6,):
                print(host, sw_item['software_version'])

相关问题 更多 >