Python for 循环。从AWS中提取特定值

我试图让 for 循环在 boto3 中工作,尽管我让它工作,但很难弄清楚。目前我有:


  `spot_requests = ec2.describe_spot_instance_requests()

   for index in spot_requests['SpotInstanceRequests']:

        instanceID = index["InstanceId"]

        instanceState = index["State"]

        spotRequestID = index["SpotInstanceRequestId"]


    print(f'{instanceID} is {instanceState} and has a request ID of {spotRequestID}')`

它返回类似:


“I-1234556 已禁用,请求 ID 为 Sir-12344”


我不明白的是为什么索引需要位于 = 符号之后,以及为什么如果我只有以下内容就会出错:


instanceID = ["InstanceId"]


另外,我了解字典的工作原理,您引用字典名称,然后在[方括号]中引用您想要查找其值的键。但是,当我尝试这个时(这显然是正确的)


    `describe_instance = ec2.describe_instances()

     for item2 in describe_instance['Reservations']:

        instance_state = item2['Instances'][0]["State"]["Name"]`

我不明白 [0] 正在做什么,因为字典中没有值为 0 的键。如果其中有嵌套字典我该怎么办?会是这样的吗:


describe_instance = ec2.describe_instances()

 for item2 in describe_instance['Reservations']:

     instance_state = item2['Instances'][0]["State"]["Name"][0]["Nested value I want to find"]

谢谢


潇湘沐
浏览 72回答 1
1回答

ABOUTYOU

我不明白的是为什么索引需要位于 = 符号之后,以及为什么如果我只有以下内容就会出错:“index”之所以存在,是因为那是您要从中获取指定值的字典。我不明白 [0] 正在做什么,因为字典中没有值为 0 的键。[<number>] 语法表示您正在尝试从列表中获取值,其中数字表示您要获取列表中的哪个索引。在您的特定情况下,item2 中的“Instances”对象是包含有关所有 EC2 实例信息的字典列表。这就是为什么您可以使用 ['State']['Name'] 来获取实例当前所处状态的名称。如果其中有嵌套字典我该怎么办?会是这样的吗:如果“名称”字段包含一个字典列表(这没有意义),那么您可以按照上一个示例中的建议进行操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python