Как взять id страны из json?

вообщем есть код, который при вводе названия страны должен вернуть ее id:

def get_country(country_name_input):
    url = "https://mobileproxy.space/api.html?command=get_id_country&lang=ru"
    headers = {
        "Authorization": f"Bearer {proxy_token}"
    }
    response = requests.get(url, headers=headers)
    data = response.json()
    country_id = data["id_country"]
    country_id_check = None
    for id in country_id.values():
        if id == country_name_input:
            country_id_check = id
            break
    print(country_id_check)
{"status":"ok","id_country":{"1":"Россия","2":"Украина","3":"Абхазия","4":"Австралия","15":"Армения","22":"Беларусь","27":"Болгария","39":"Великобритания","53":"Германия","61":"Грузия","62":"Дания","70":"Израиль","71":"Индия","72":"Индонезия","76":"Ирландия","78":"Испания","82":"Казахстан","100":"Кыргызстан","102":"Латвия","107":"Литва","122":"Молдова","133":"Нидерланды","147":"Польша","148":"Португалия","152":"Румыния","153":"США","180":"Таиланд","198":"Франция","204":"Чехия","212":"Эстония"}}

как задать переменной country_id_check айди этой страны, а не ее название? например: get_country('Россия') - 1


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

Автор решения: Qwertiy

const data = {"status":"ok","id_country":{"1":"Россия","2":"Украина","3":"Абхазия","4":"Австралия","15":"Армения","22":"Беларусь","27":"Болгария","39":"Великобритания","53":"Германия","61":"Грузия","62":"Дания","70":"Израиль","71":"Индия","72":"Индонезия","76":"Ирландия","78":"Испания","82":"Казахстан","100":"Кыргызстан","102":"Латвия","107":"Литва","122":"Молдова","133":"Нидерланды","147":"Польша","148":"Португалия","152":"Румыния","153":"США","180":"Таиланд","198":"Франция","204":"Чехия","212":"Эстония"}}

const nameById = data.id_country
const idByName = Object.fromEntries(Object.entries(nameById).map(x => x.reverse()))

console.log(idByName['Россия'])

const data = {"status":"ok","id_country":{"1":"Россия","2":"Украина","3":"Абхазия","4":"Австралия","15":"Армения","22":"Беларусь","27":"Болгария","39":"Великобритания","53":"Германия","61":"Грузия","62":"Дания","70":"Израиль","71":"Индия","72":"Индонезия","76":"Ирландия","78":"Испания","82":"Казахстан","100":"Кыргызстан","102":"Латвия","107":"Литва","122":"Молдова","133":"Нидерланды","147":"Польша","148":"Португалия","152":"Румыния","153":"США","180":"Таиланд","198":"Франция","204":"Чехия","212":"Эстония"}}

const nameById = data.id_country
const idByName = Object.create(null)

for (let [id, name] of Object.entries(nameById)) {
  idByName[name] = id
}

console.log(idByName['Россия'])

→ Ссылка
Автор решения: misha plotnikov

Как я понял, мы имеем json(словарь) под названием country_id. В коде вы пишете for id in country_id.values():, хотя при написании .values(), нам передаётся 2 значения, значит данная часть кода будет иметь следующий вид:

Выделенная ошибка

key_1 = 'Россия'

for id, name in country_id.values():
    if name == key_1:
        country_id_check = id
        break

print(country_id_check)

А вот так будет выглядеть ваш код:

def get_country(country_name_input):
    url = "https://mobileproxy.space/api.html?command=get_id_country&lang=ru"
    headers = {
        "Authorization": f"Bearer {proxy_token}"
    }
    response = requests.get(url, headers=headers)
    data = response.json()
    country_id = data["id_country"]
    country_id_check = None
    for id, name in country_id.values():
        if name == country_name_input:
            country_id_check = id
            break
    print(country_id_check)

Если вкратце, повторю ошибку: dict.values() передаёт 2 значения, key и value. Вы должны в условии сравнивать value и имя страны (country_name_input). После присваивать в переменную (country_id_check) key.

Надеюсь понятно объяснил.

Остальные ошибки не проверял. Если будут вопросы, с удовольствием отвечу в комментариях!

→ Ссылка