簡體   English   中英

字典/json 賦值 - python

[英]Dictionary/json assignment - python

我正在處理一項任務,我需要根據用戶的輸入從字典中獲取信息。 例如,我有這本必須使用的字典:

{
  "north_america":{
      "canada":{
          "ottawa":{
                "population":500,
                "average_age":18
           }
      }
   },
   "south_america":{
      "brazil":{
          "sao_paolo":{
                "population":200,
                "average_age":21
          }
      }
   }
}

我的程序的重點是根據用戶選擇的城市返回國家。 例如,程序詢問“你選擇哪個城市”后,如果用戶寫“渥太華”,我的程序應該返回分配渥太華的國家的名稱,所以對於本例來說,加拿大。

有人可以幫幫我嗎? 謝謝!

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

看來您的大陸數據集應該是數組,而不是字典。 它可能如下所示:

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'

你可以試試這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM