Los índices de lista de errores deben ser enteros o segmentos, no str

Basado en el título, ayúdame a resolver el error. He intentado imprimir el countryCode basado en country_name que está en la variable ‘rv’. country_found es una lista de datos que tienen el mismo valor en la lista de países, y luego trato de recuperar el código de país y ahí aparece el error

rv = "Indonesia" country_lower = rv.lower() countries = { "DATA": { "data": [{ "countryId": "26", "countryCode": "AU", "name": "Australia" }, { "countryId": "17", "countryCode": "ID", "name": "Indonesia" }] } } def take_first(predicate, iterable): for element in iterable: if predicate(element): yield element break country_found = list( take_first( lambda e: e['name'].lower() == country_lower, countries['DATA']['data'] ) ) default_country_code = 'US' country_code = ( country_found['countryCode'] if country_found else default_country_code ) print (country_code) 

country_found es una lista , pero está intentando obtener un elemento mediante un índice de cadena:

 country_found['countryCode'] 

Probablemente has querido obtener el primer resultado de un partido:

 country_code = country_found[0]['countryCode'] if country_found else default_country_code 

Pero, ¿realmente necesita tener el resultado como una lista, qué pasaría si solo usara next() :

 result = take_first(lambda e: e['name'].lower() == country_lower, countries['DATA']['data']) try: country_code = next(result)['countryCode'] except StopIteration: country_code = default_country_code 

Si recibo su pregunta correctamente, a continuación se muestra lo que puede querer analizar.

 default_country_code = 'US' print(country_found) # ==> list [{'countryId': '17', 'name': 'Indonesia', 'countryCode': 'IN'}] print(country_found[0]) # ==> dictionary {'countryId': '17', 'name': 'Indonesia', 'countryCode': 'IN'} print(country_found[0].get('countryCode',default_country_code)) # get countryCode. If countryCode is not there, get the default_country_code