将字典对象提取到列表

时间:2016-06-08 07:35:49

标签: python list dictionary

我需要一些帮助,将字典中返回的内容放到两个不同的列表中。

代码是:

for region in regions:
    instance_information = {}
    ip_dict = {}
    client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,)
    addresses_dict = client.describe_addresses().get('Addresses')

    for address in addresses_dict:
        if address.get('InstanceId'):
            instance_information[address['InstanceId']] = [address.get('PublicIp')]

    dex_dict = client.describe_tags().get('Tags')
    for dex in dex_dict:
        if instance_information.get(dex['ResourceId']):
            instance_information[dex['ResourceId']].append(dex.get('Value'))
    print (json.dumps(instance_information,indent=4))

返回:

{
    "i-c581ea32": [
        "52.113.42.171", 
        "SDL Exclusive LB", 
        "pdx01-ms-pdl-lb01"
    ], 
    "i-b8601217": [
        "52.26.21.83", 
        "pdx-LBi-b8609671", 
        "HAProxy Server", 
        "us-west-2", 
        "pdx02-cloud-trial01", 
        "subnet-d86be1af", 
        "us-west-2b"
    ], 
    "i-3c2b02ca": [
        "52.13.84.44", 
        "pdx01-lb02"
    ], 
    "i-986fc140": [
        "52.3.173.116", 
        "pdx-hprod-LBi-316fc340", 
        "HAProxy Server", 
        "us-west-2", 
        "pdx02-he-prod", 
        "subnet-bcdcd6cb", 
        "us-west-2b"
    ], 
    "i-035a2c4": [
        "5.33.81.148", 
        "pdx-ece-prod-LBi-022c4", 
        "HAProxy Server", 
        "us-west-2", 
        "pdx02-emsce-prod

我只需要提取IP并将其放入dict中。我需要将此IP传递给另一个def,如何做到这一点?

2 个答案:

答案 0 :(得分:3)

列表理解是你的工具:

iplist = [v[0] for v in instance_information.values()]

编辑: 根据需要,创建一个返回ips的函数

def getIpFromRegions(regions):
  for region in regions:
      instance_information = {}
      ip_dict = {}
      client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,)
      addresses_dict = client.describe_addresses().get('Addresses')

      for address in addresses_dict:
          if address.get('InstanceId'):
              instance_information[address['InstanceId']] = [address.get('PublicIp')]

      dex_dict = client.describe_tags().get('Tags')
      for dex in dex_dict:
          if instance_information.get(dex['ResourceId']):
              instance_information[dex['ResourceId']].append(dex.get('Value'))
      yield [v[0] for v in instance_information.values()]

EDIT2:

对于所有组合的ip区域,要理解你的新功能:

allip = [ip for ip in ips for ips in getIpFromRegions(regions)]

答案 1 :(得分:1)

您可以简单地迭代给定字典中的所有值,并选择第一个元素作为IP以将其附加到新列表中。

ip_list = [i[0]for i in instance_information.values()]
>> ['52.113.42.171', '52.26.21.83', '52.13.84.44', '5.33.81.148', '52.3.173.116']

或者,如果您需要类似字典的字典,那么您可以尝试:

instance_information_ip = {i:instance_information[i][0] for i in instance_information}
>>> {'i-c581ea32': '52.113.42.171', 'i-b8601217': '52.26.21.83', 'i-3c2b02ca': '52.13.84.44', 'i-986fc140': '52.3.173.116', 'i-035a2c4': '5.33.81.148'}