Как выбрать свойство элементов в массиве? python

У меня есть много одинаковых массивов, из которых мне нужно выбрать properties только у "geo_lon" и "geo_lat". Вот один из примеров массива:

[{'value': '658747', 'unrestricted_value': 'Алтайский край, Крутихинский р-н, с Волчно-Бурлинское, ул Партизанская, д 98', 'data': {'postal_code': '658747', 'is_closed': False, 'type_code': 'СОПС', 'address_str': 'Алтайский край, Крутихинский р-н, с Волчно-Бурлинское, ул Партизанская, д 98', 'address_kladr_id': '2202300000600', 'address_qc': '0', 'geo_lat': 54.053755, 'geo_lon': 80.768417, 'schedule_mon': '09:00-17:00, обед 13:00-14:00', 'schedule_tue': None, 'schedule_wed': '09:00-17:00, обед 13:00-14:00', 'schedule_thu': '09:00-17:00, обед 13:00-14:00', 'schedule_fri': '09:00-17:00, обед 13:00-14:00', 'schedule_sat': '09:00-16:00, обед 13:00-14:00', 'schedule_sun': None}}]

Пытаюсь выполнить такой код(в котором list_1 = один из примеров массива)

for index, element in enumerate(list_1):
    d = dadata.suggest("postal_unit", element)
    
    for feature in d['data']:
        coor = feature['geo_lon']
        print(coor)

Выдает ошибку:

for feature in d['data']:
TypeError: list indices must be integers or slices, not str

Так же пробовал этот код:

for index, element in enumerate(list_1):
    data = element["data"]
    geo_lat = data["geo_lat"]
    geo_lon = data["geo_lon"]
    print(str(geo_lat))
    print(str(geo_lon))

И снова ошибка:

data = element["data"]
TypeError: 'int' object is not subscriptable

Буду благодарен за помощь.


Ответы (1 шт):

Автор решения: Алексей Р

На тестовых данных ваш код № 2 отрабатывает нормально. Скорее всего, какие-то элементы имеют неправильную структуру. Попробуйте обработать ошибку и выявить такие элементы.

v = [{'value': '658747',
      'unrestricted_value': 'Алтайский край, Крутихинский р-н, с Волчно-Бурлинское, ул Партизанская, д 98',
      'data': {'postal_code': '658747', 'is_closed': False, 'type_code': 'СОПС',
               'address_str': 'Алтайский край, Крутихинский р-н, с Волчно-Бурлинское, ул Партизанская, д 98',
               'address_kladr_id': '2202300000600', 'address_qc': '0', 'geo_lat': 54.053755, 'geo_lon': 80.768417,
               'schedule_mon': '09:00-17:00, обед 13:00-14:00', 'schedule_tue': None,
               'schedule_wed': '09:00-17:00, обед 13:00-14:00', 'schedule_thu': '09:00-17:00, обед 13:00-14:00',
               'schedule_fri': '09:00-17:00, обед 13:00-14:00', 'schedule_sat': '09:00-16:00, обед 13:00-14:00',
               'schedule_sun': None}},
     {'value': '658747',
      'unrestricted_value': 'Алтайский край, Крутихинский р-н, с Волчно-Бурлинское, ул Партизанская, д 98',
      'data': 1}
     ]

for index, element in enumerate(v):
    try:
        data = element["data"]
        geo_lat = data["geo_lat"]
        geo_lon = data["geo_lon"]
        print(f'{index}) geo_lat: {geo_lat}, geo_lon: {geo_lon}')
    except:
        print(f'Ошибочный элемент № {index}: {element}')
0) geo_lat: 54.053755, geo_lon: 80.768417
Ошибочный элемент № 1: {'value': '658747', 'unrestricted_value': 'Алтайский край, Крутихинский р-н, с Волчно-Бурлинское, ул Партизанская, д 98', 'data': 1}
→ Ссылка