Как взять 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 шт):
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['Россия'])
Как я понял, мы имеем 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.
Надеюсь понятно объяснил.
Остальные ошибки не проверял. Если будут вопросы, с удовольствием отвечу в комментариях!