我需要一些帮助,将字典中返回的内容放到两个不同的列表中。
代码是:
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
,如何做到这一点?
答案 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'}