Как найти определенный id перед искомым объектом

https://api.hh.ru/areas, тут содержатся id городов и поселков. Когда в программу в питоне заходит название города или поселка, как мне вытащить из json списка id этого объекта, который стоит перед его названием.


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

Автор решения: Ivan Simonov

Если я правильно понял вопрос, то можно так

import requests

areas = requests.get('https://api.hh.ru/areas')

for region in areas.json()[0]['areas']:
    for city in region['areas']:
        if city['name'] == 'Йошкар-Ола':
            print(city['name'])
            print(city['id'])

Вывод будет

Йошкар-Ола
61
→ Ссылка
Автор решения: CrazyElf

Рекурсивный обход коллекций поможет, который тут много раз обсуждался:

import requests

def find(item, name):
    if not item:
        return
    if isinstance(item, list):
        for i in item:
            yield from find(i, name)   
        return
    if name.lower() in item['name'].lower():
        yield {'id': item['id'], 'name': item['name']}
    yield from find(item.get('areas'), name)

areas = requests.get('https://api.hh.ru/areas').json()
for d in find(areas, 'великий'):
    print(d)

Вывод:

{'id': '67', 'name': 'Великий Новгород'}
{'id': '1742', 'name': 'Великий Устюг'}
{'id': '3593', 'name': 'Великий Березный'}
{'id': '3111', 'name': 'Великий Бурлук'}

Тут я для примера возвращаю словарь из id и названия, чтобы во-первых проверить, что код работает, а во-вторых у меня используется поиск по подстроке, могущий дать несколько результатов. Вы можете возвращать только id, если хотите, или что угодно. И искать по точному совпадению. Главное сам алгоритм прохода по структуре у вас есть.

→ Ссылка