如何访问dict值?

时间:2016-06-29 10:22:49

标签: python

我的回复语法类型为dict

{
    'StoppingInstances': [
        {
            'InstanceId': 'string',
            'CurrentState': {
                'Code': 123,
                'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped'
            },
            'PreviousState': {
                'Code': 123,
                'Name': 'pending'|'running'|'shutting-down'|'terminated'|'stopping'|'stopped'
            }
        },
    ]
}

现在,如果我需要检查currentState是否为stopping怎么办?

print "Stopping instance Now",response['StoppingInstances']

for instance in response['StoppingInstances']:
    if instance['CurrentState']['Name'] == "stopping":
        print "Still Stooping"

    if instance['CurrentState']['Name'] == "stopped":
        print "Instance Stopped"
print "Now Starting the instance"
response_new = client.start_instances(InstanceIds=[instance_id])
for start_instance in response_new['StartingInstances']:
    if start_instance['CurrentState']['Name'] == "running":
        print "Instance is UP and running"
    else:
        print "Some Error occured!!"

2 个答案:

答案 0 :(得分:0)

您的response['StoppingInstances']对象是词典的列表。您必须循环覆盖或索引单个项目:

response['StoppingInstances'][0]['CurrentState']['Name'] == "stopping"

如果您需要测试这些对象中的任何是否处于stopping状态,您可以使用any()函数:

any(o['CurrentState']['Name'] == "stopping" for o in response['StoppingInstances'])

如果您需要测试每个实例,请使用循环:

for instance in response['StoppingInstances']:
    if instance['CurrentState']['Name'] == "stopping":

答案 1 :(得分:0)

您的数据包含一个包含外部dict值的列表,而不是您想象的简单嵌套字典。您需要索引列表,然后通过键访问嵌套的dict值:

response['StoppingInstances'][0]['CurrentState']['Name']
#                             ^

if区块中:

if response['StoppingInstances'][0]['CurrentState']['Name'] == "stopped":
     print "Instance Stopped"