मेरे पास एक जेसन प्रतिक्रिया वस्तु है और मैं राज्य की घटनाओं की संख्या गिनना चाहता हूं = healthy

d= {
    "ResponseMetadata": {
        "HTTPHeaders": {
            "content-length": "444", 
            "content-type": "text/xml", 
            "date": "Tue, 12 Nov 2019 02:30:11 GMT", 
            "x-amzn-requestid": "1234"
        }, 
        "HTTPStatusCode": 200, 
        "RequestId": "1234", 
        "RetryAttempts": 0
    }, 
    "TargetHealthDescriptions": [
        {
            "HealthCheckPort": "80", 
            "Target": {
                "Id": "i-dummy", 
                "Port": 80
            }, 
            "TargetHealth": {
                "State": "healthy"
            }
        }, 
        {
            "HealthCheckPort": "80", 
            "Target": {
                "Id": "i-testing", 
                "Port": 80
            }, 
            "TargetHealth": {
                "State": "healthy"
            }
        }
    ]
}

मैंने कोशिश की:

count = 0
for x,y in d.items():
    if y['State'] == 'healthy':
        count += 1
print(count)

लेकिन यह शिकायत करता है

Traceback (most recent call last):
  File "deploy_staging_web.py", line , in <module>
    if y['State'] == 'healthy':
TypeError: list indices must be integers, not str

मैं इसके आसपास कैसे पहुंचूं?

1
kRazzy R 12 नवम्बर 2019, 05:53

1 उत्तर

सबसे बढ़िया उत्तर

आप रिकर्सन का उपयोग कर सकते हैं:

def get_sum(d):
  val = 0 if not isinstance(d, dict) else d.get('State') == 'healthy'
  return val+sum(get_sum(i) for i in getattr(d, 'values', lambda :d)() if isinstance(i, (dict, list)))

print(get_sum(d))

आउटपुट:

2
1
Ajax1234 12 नवम्बर 2019, 06:00