#python #python-3.x #dictionary
#python #python-3.x #словарь
Вопрос:
Я работаю над заданием, в котором мне нужно получить информацию из словаря на основе записи пользователя. Например, у меня есть этот словарь, с которым я должен работать:
{
"north_america":{
"canada":{
"ottawa":{
"population":500,
"average_age":18
}
}
},
"south_america":{
"brazil":{
"sao_paolo":{
"population":200,
"average_age":21
}
}
}
}
Цель моей программы — вернуть страну в зависимости от того, какой город выбирает пользователь. Например, после того, как программа спросит «Какой город вы выбираете», если пользователь напишет «оттава», моя программа должна вернуть название страны, в которой назначена Оттава, поэтому в данном случае Канада.
Может кто-нибудь мне помочь, пожалуйста? Спасибо!
Комментарии:
1. Что вы пробовали? какую ошибку вы получаете?
2. Пожалуйста, сначала попробуйте это, а затем перейдите к переполнению стека с более конкретными проблемами.
Ответ №1:
class country_finder():
def __init__(self):
original_dict = {
"north_america":{
"canada":{
"ottawa":{
"population":500,
"average_age":18
}
}
},
"south_america":{
"brazil":{
"sao_paolo":{
"population":200,
"average_age":21
}
}
}
}
self.new_dict = {}
for continent in original_dict:
continent_dict = original_dict[continent]
for country in continent_dict:
country_dict = continent_dict[country]
for city in country_dict:
self.new_dict[city] = country
def find_country(self, city_name):
return self.new_dict[city_name]
finder = country_finder()
print(finder.find_country("ottawa"))
Ответ №2:
def displayCountry(citySelected):
for continent, countryDict in continentlist.items():
for country,cityDict in countryDict.items():
for city,value in cityDict.items():
if(city==citySelected):
print(country)
displayCountry("sao_paolo")
Ответ №3:
Кажется, ваш набор данных continent должен быть array, а не dict . Это может быть похоже на следующее:
data = {
"north_america": [{
"canada": {
"ottawa": {
"population": 500,
"average_age": 18
}
}
}],
"south_america": [{
"brazil": {
"sao_paolo": {
"population": 200,
"average_age": 21
}
}
}],
}
Затем повторите каждый континент, каждую страну. После этого получите название страны и сравните название заглавной буквы с желаемым.
def solve(capital_wanted: str):
for continent_name in data.keys():
for country in data[continent_name]:
for key in country.keys():
country_name = key
break
capital = get_capital(country[country_name])
if capital == capital_wanted:
return country_name
return None
def get_capital(country_info: dict) -> str:
for key in country_info.keys():
capital = key
break
return capital
if __name__ == '__main__':
assert solve('ottawa') == 'canada'
assert solve('sao_paolo') == 'brazil'
Ответ №4:
Вы можете попробовать это,
x={
"north_america":{
"canada":{
"ottawa":{
"population":500,
"average_age":18
}
}
},
"south_america":{
"brazil":{
"sao_paolo":{
"population":200,
"average_age":21
}
}
}
}
city="sao_paolo"
print(next(c for a,b in x.items() for c,d in b.items() for e,f in d.items() if e==city))