[英]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.