2016-06-29 13 views
-2

Ich habe eine Antwort Syntax vom Typ dict:Wie kann auf den Diktatwert zugegriffen werden?

{ 
    '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' 
      } 
     }, 
    ] 
} 

Wenn ich nun, wenn der current ist stopping, wie dies zu tun, überprüfen muß?

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!!" 
+0

einfach auf Ihre Daten suchen. 'response ['StoppingInstances']' ist eine Liste (Array in JSON), die Sie mit einer Ganzzahl indizieren müssen. – jonrsharpe

Antwort

0

Ihr response['StoppingInstances'] Objekt ist eine Liste von Wörterbüchern. Sie würden über die, oder Index ein einzelnes Element zu jeder Schleife haben:

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

Wenn Sie zu testen, ob jede dieser Objekte im stopping Zustand ist, können Sie die any() Funktion:

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

Wenn Sie jede Instanz testen müssen, verwenden Sie eine Schleife:

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

Wie wird festgestellt, dass es sich um eine Liste von Diktaten handelt? – DrugLORD

+0

@DrugLORD: Sehen Sie sich die Syntax genau an. Sie haben eine '[....]' Liste, die ein '{...}' Wörterbuch enthält. Der Name des Schlüssels ist auch ein Hinweis; es ist 'StopingInstances', * Plural *, nicht' StopingInstance', Singular. –

+0

oh okay, ich versuche tatsächlich, die Instanzen nacheinander zu stoppen und zu starten, ich aktualisiere den Code, können Sie bitte einen Blick – DrugLORD

0

Ihre Daten enthält eine Liste Einschließen des oute r dict Werte, und nicht einfach verschachtelte Wörterbücher, wie Sie vermuten. Sie müssen die Liste zu indizieren, greifen dann die verschachtelten dict Werte über die Tasten:

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

Und in Ihrem if Block:

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

wie kann ich mehr über dict wissen? – DrugLORD

+0

@DrugLORD Es gibt viele gute Online-Tutorials wie [dieses] (http://www.python-course.eu/dictionaries.php) aber Ihre erste Referenz sollte die [Python-Dokumente auf Datenstrukturen] sein (https://docs.python.org/2/tutorial/datastructures.html#dictionaries) –

+0

Danke Moses, ich habe den neuen Code aktualisiert, kannst du einen Blick darauf werfen? – DrugLORD

Verwandte Themen