Назначение словаря / json — python

#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))