首页 > 解决方案 > 是否可以在 python 的列表理解中使用多个条件?

问题描述

试图在 AWS EC2 上获取带有实例标签“名称”的实例列表,其中包含特定值。

这个片段是功能性的,但认为我们可以让它更干净:

# -*- coding: utf-8 -*-

import sys
import boto3

class proxies_on_ec2():
   def __init__(self, **kwargs):
      self.ec2client = boto3.resource('ec2')

   def get_list(self):
      self.get_all_instances = self.ec2client.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
    
      self.instances_list = []

      for instance in self.get_all_instances:
         for tag in instance.tags:
            if tag.get('Key') == 'Name':
               if "[Dev]" in tag['Value']:
                    self.instances_list.append({'Name': tag['Value'], 'id': instance.id, 'ip': instance.public_ip_address})

    return self.instances_list

我无法通过列表理解得到类似的结果:

self.instances_list = [{'Name':instance.tags[0].get('Value'), 'id':instance.id, 'ip':instance.public_ip_address} for instance in self.get_all_instances]

问题是 instance.tags[0]。是否可以在此条件后添加 'if tag.get('Key') == 'Name' 并将 instance.tags[0] 替换为 instance.tag ?

感谢帮助

标签: pythonpython-3.xamazon-web-servicesaws-lambdaboto3

解决方案


self.instances_list = [
    {"Name": tag["Value"], "id": instance.id, "ip": instance.public_ip_address}
    for instance in self.get_all_instances
    for tag in instance.tags
    if tag.get("Key") == "Name" and "[Dev]" in tag["Value"]
]

推荐阅读