从嵌套的字典 aws 响应中获取键和值
grabbing key and value from nested dict aws response
我正在努力了解嵌套指令以及如何从中获取键和值。
我有一个很好的脚本可以从我的 AWS 账户中获取 VPC 信息:
import boto3
from pprint import pprint
#Declaring some resources for the below scripts.
ec2 = boto3.resource('ec2')
client = boto3.client('ec2')
#Grabing the VPC information and printing to console.
filters = [{'Name':'tag:Name', 'Values':['*']}]
vpcs = list(ec2.vpcs.filter(Filters=filters))
for vpc in vpcs:
response = client.describe_vpcs(
VpcIds=[
vpc.id,
]
)
pprint(response['Vpcs'])
print('-------')
输出如下:
[{'CidrBlock': '666.666.0.0/66', 'DhcpOptionsId': '55555', 'InstanceTenancy': 'default', 'IsDefault':假,'State':'available','Tags':[{'Key':'Environment','Value':'dev.aws'} ,
{'Key': 'Name', 'Value': 'dev.aws.co.uk'}], 'VpcId': 'vpc-755555'}]
现在我想要的是只获取 VpcId 和标签,我已经尝试了 pprint(response['Vpcs']["VpcId"] 的多种变体。我在网上搜索并尝试了多种变体,但我似乎无法理解它
任何人都可以为我的示例提供任何建议吗?
更新:
再次感谢您能否协助解决后续问题?
我现在正在尝试将其放入 for 循环中,这样我就可以获取任何 VPC 的输出和结果标签,这些标签可能存在于 AWS 账户中,但遇到了 "TypeError: string indices must be integers"
我试过的代码(这个有很多变体):
for vpcs in client.describe_vpcs():
vpcid = vpcs['Vpcs'][0]['VpcId']
print("Vpc Id:" + vpcid)
for vpcs in client.describe_vpcs()['Vpcs']:
print("VPC ID: " + vpcs['VpcId'])
print(response['Vpcs'][0]['Tags'])
print("Tags: " + vpcs['Tags'][0])
有什么想法吗?
更新二:
这个循环有效,将打印出我的 VPC 和第一个 VPC 的标签:
for vpcs in client.describe_vpcs()['Vpcs']:
print("VPC ID: " + vpcs['VpcId'])
print(response['Vpcs'][0]['Tags'])
我试图让它循环使用 VPC id 的标签。
print(client.describe_vpcs())
的输出:
{'ResponseMetadata': {'RequestId': 'nnnnn-e323-nn-a9a3-254nnnn2c3b6', 'RetryAttempts': 0, 'HTTPHeaders': {'transfer-encoding': 'chunked', 'content-type': 'text/xml;charset=UTF-8', 'vary': 'Accept-Encoding', 'server': 'AmazonEC2', 'date': 'Fri, 27 Jan 2017 14:21:58 GMT'}, 'HTTPStatusCode': 200}, 'Vpcs': [{'State': 'available', 'IsDefault': True, 'CidrBlock': '172.31.0.0/16', 'DhcpOptionsId': 'dopt-1d555578', 'VpcId': 'vpc-85555eb', 'InstanceTenancy': 'default', 'Tags': [{'Value': 'Default VPC', 'Key': 'Name'}]}, {'State': 'available', 'IsDefault': False, 'CidrBlock': '172.22.0.0/16', 'DhcpOptionsId': 'dopt-1d55558', 'VpcId': 'vpc-255554d', 'InstanceTenancy': 'default', 'Tags': [{'Value': 'DEV', 'Key': 'Environment'}, {'Value': 'dev2.aws.co.uk', 'Key': 'Name'}]}, {'State': 'available', 'IsDefault': False, 'CidrBlock': '172.30.0.0/16', 'DhcpOptionsId': 'dopt-16666d78', 'VpcId': 'vpc-7666617', 'InstanceTenancy': 'default', 'Tags': [{'Value': 'dev.aws', 'Key': 'Environment'}, {'Value': 'dev.aws.co.uk', 'Key': 'Name'}]}]}
修正为:
import boto3
client = boto3.client('ec2')
#This is the VPC ID and Linked Tags
for vpctags in client.describe_vpcs()['Vpcs']:
print("VPC ID: ", vpctags['VpcId'])
print("Tags: ", vpctags['Tags'])
非常感谢 MYGz 花时间提供帮助。
你需要:
vpcid = response['Vpcs'][0]['VpcId']
# ^dict ^key ^item ^ key in dictionary
# at 0th
# position
# (which is a dict)
tags = response['Vpcs'][0]['Tags']
response['Vpcs']
returns 一个列表。此列表仅包含 1 个元素。该 1 元素是一个字典,其中包含您想要的条目 'VpcId'
字典中键对应的值是通过键访问的。列表中的值通过索引位置访问。
例如:
要访问 'k4'
并获取以下字典中的值 'v4'
a={'k1': [{'k2': [{'k3': 'v3' }, {'k4': 'v4'}] }]}
你必须这样做:
a['k1'][0]['k2'][1]['k4']
我正在努力了解嵌套指令以及如何从中获取键和值。
我有一个很好的脚本可以从我的 AWS 账户中获取 VPC 信息:
import boto3
from pprint import pprint
#Declaring some resources for the below scripts.
ec2 = boto3.resource('ec2')
client = boto3.client('ec2')
#Grabing the VPC information and printing to console.
filters = [{'Name':'tag:Name', 'Values':['*']}]
vpcs = list(ec2.vpcs.filter(Filters=filters))
for vpc in vpcs:
response = client.describe_vpcs(
VpcIds=[
vpc.id,
]
)
pprint(response['Vpcs'])
print('-------')
输出如下:
[{'CidrBlock': '666.666.0.0/66', 'DhcpOptionsId': '55555', 'InstanceTenancy': 'default', 'IsDefault':假,'State':'available','Tags':[{'Key':'Environment','Value':'dev.aws'} , {'Key': 'Name', 'Value': 'dev.aws.co.uk'}], 'VpcId': 'vpc-755555'}]
现在我想要的是只获取 VpcId 和标签,我已经尝试了 pprint(response['Vpcs']["VpcId"] 的多种变体。我在网上搜索并尝试了多种变体,但我似乎无法理解它
任何人都可以为我的示例提供任何建议吗?
更新: 再次感谢您能否协助解决后续问题?
我现在正在尝试将其放入 for 循环中,这样我就可以获取任何 VPC 的输出和结果标签,这些标签可能存在于 AWS 账户中,但遇到了 "TypeError: string indices must be integers"
我试过的代码(这个有很多变体):
for vpcs in client.describe_vpcs():
vpcid = vpcs['Vpcs'][0]['VpcId']
print("Vpc Id:" + vpcid)
for vpcs in client.describe_vpcs()['Vpcs']:
print("VPC ID: " + vpcs['VpcId'])
print(response['Vpcs'][0]['Tags'])
print("Tags: " + vpcs['Tags'][0])
有什么想法吗?
更新二:
这个循环有效,将打印出我的 VPC 和第一个 VPC 的标签:
for vpcs in client.describe_vpcs()['Vpcs']:
print("VPC ID: " + vpcs['VpcId'])
print(response['Vpcs'][0]['Tags'])
我试图让它循环使用 VPC id 的标签。
print(client.describe_vpcs())
的输出:
{'ResponseMetadata': {'RequestId': 'nnnnn-e323-nn-a9a3-254nnnn2c3b6', 'RetryAttempts': 0, 'HTTPHeaders': {'transfer-encoding': 'chunked', 'content-type': 'text/xml;charset=UTF-8', 'vary': 'Accept-Encoding', 'server': 'AmazonEC2', 'date': 'Fri, 27 Jan 2017 14:21:58 GMT'}, 'HTTPStatusCode': 200}, 'Vpcs': [{'State': 'available', 'IsDefault': True, 'CidrBlock': '172.31.0.0/16', 'DhcpOptionsId': 'dopt-1d555578', 'VpcId': 'vpc-85555eb', 'InstanceTenancy': 'default', 'Tags': [{'Value': 'Default VPC', 'Key': 'Name'}]}, {'State': 'available', 'IsDefault': False, 'CidrBlock': '172.22.0.0/16', 'DhcpOptionsId': 'dopt-1d55558', 'VpcId': 'vpc-255554d', 'InstanceTenancy': 'default', 'Tags': [{'Value': 'DEV', 'Key': 'Environment'}, {'Value': 'dev2.aws.co.uk', 'Key': 'Name'}]}, {'State': 'available', 'IsDefault': False, 'CidrBlock': '172.30.0.0/16', 'DhcpOptionsId': 'dopt-16666d78', 'VpcId': 'vpc-7666617', 'InstanceTenancy': 'default', 'Tags': [{'Value': 'dev.aws', 'Key': 'Environment'}, {'Value': 'dev.aws.co.uk', 'Key': 'Name'}]}]}
修正为:
import boto3
client = boto3.client('ec2')
#This is the VPC ID and Linked Tags
for vpctags in client.describe_vpcs()['Vpcs']:
print("VPC ID: ", vpctags['VpcId'])
print("Tags: ", vpctags['Tags'])
非常感谢 MYGz 花时间提供帮助。
你需要:
vpcid = response['Vpcs'][0]['VpcId']
# ^dict ^key ^item ^ key in dictionary
# at 0th
# position
# (which is a dict)
tags = response['Vpcs'][0]['Tags']
response['Vpcs']
returns 一个列表。此列表仅包含 1 个元素。该 1 元素是一个字典,其中包含您想要的条目 'VpcId'
字典中键对应的值是通过键访问的。列表中的值通过索引位置访问。
例如:
要访问 'k4'
并获取以下字典中的值 'v4'
a={'k1': [{'k2': [{'k3': 'v3' }, {'k4': 'v4'}] }]}
你必须这样做:
a['k1'][0]['k2'][1]['k4']