反向查字典
Reverse lookup Dictionary
我有以下字典,我想进行反向查找。
countries_dict = {'Andorra': ('Europe', 'Andorra la Vella'),
'Afghanistan': ('Asia', 'Kabul'),
'Antigua and Barbuda': ('North America', "St. John's"),
'Albania': ('Europe', 'Tirana'),
'Armenia': ('Asia', 'Yerevan'),
'Angola': ('Africa', 'Luanda'),
'Argentina': ('South America', 'Buenos Aires'),
'Austria': ('Europe', 'Vienna'),
'Australia': ('Oceania', 'Canberra'),
'Azerbaijan': ('Asia', 'Baku'),
'Barbados': ('North America', 'Bridgetown'),
'Bangladesh': ('Asia', 'Dhaka'),
'Belgium': ('Europe', 'Brussels')}
我的代码如下所示:
def create_continents_dict(dct = dict) -> dict:
reversed_dictionary = {value[0] : key for (key, value) in dct.items()}
return reversed_dictionary
print(create_continents_dict(countries_dict))
{'Europe': 'Belgium', 'Asia': 'Bangladesh', 'North America': 'Barbados', 'Africa': 'Angola', 'South America': 'Argentina', 'Oceania': 'Australia'}
但是我只得到它查找的最后一个国家/地区作为值。我想要的是作为国家列表的值。使用上面的代码,我应该期望每个拥有相同大陆的国家都应该在列表中,对吗?
{'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'] 'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'], 'North America': ['Antigua and Barbuda', 'Barbados'], 'Africa': ['Angola'], 'South America': ['Argentina'], 'Oceania': ['Australia']}
您可以将 dict.setdefault()
与默认列表 ([]
) 一起使用,然后在其中附加国家/地区:
out = {}
for country, (continent, _) in countries_dict.items():
out.setdefault(continent, []).append(country)
print(out)
打印:
{'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'],
'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'],
'North America': ['Antigua and Barbuda', 'Barbados'],
'Africa': ['Angola'],
'South America': ['Argentina'],
'Oceania': ['Australia']}
你可以在这里使用collections.defaultdict
def reverse_dict(countries_dict):
reversed_dictionary = defaultdict(list)
for key, value in countries_dict.items():
reversed_dictionary[value[0]].append(key)
return reversed_dictionary
>>> reverse_dict(countries_dict)
defaultdict(<class 'list'>,
{'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'],
'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'],
'North America': ['Antigua and Barbuda', 'Barbados'],
'Africa': ['Angola'],
'South America': ['Argentina'],
'Oceania': ['Australia']})
尝试
from collections import defaultdict
countries_dict = {'Andorra': ('Europe', 'Andorra la Vella'),
'Afghanistan': ('Asia', 'Kabul'),
'Antigua and Barbuda': ('North America', "St. John's"),
'Albania': ('Europe', 'Tirana'),
'Armenia': ('Asia', 'Yerevan'),
'Angola': ('Africa', 'Luanda'),
'Argentina': ('South America', 'Buenos Aires'),
'Austria': ('Europe', 'Vienna'),
'Australia': ('Oceania', 'Canberra'),
'Azerbaijan': ('Asia', 'Baku'),
'Barbados': ('North America', 'Bridgetown'),
'Bangladesh': ('Asia', 'Dhaka'),
'Belgium': ('Europe', 'Brussels')}
d = defaultdict(list)
for k,v in countries_dict.items():
d[v[0]].append(k)
print(d)
输出
defaultdict(<class 'list'>, {'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'], 'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'], 'North America': ['Antigua and Barbuda', 'Barbados'], 'Africa': ['Angola'], 'South America': ['Argentina'], 'Oceania': ['Australia']})
def create_continents_dict(dct = dict) -> dict:
reversed_dictionary = {}
for key, value in dct.items():
if value[0] not in reversed_dictionary.keys():
reversed_dictionary[value[0]] = []
reversed_dictionary[value[0]].append(key)
return reversed_dictionary
输出:
print(create_continents_dict(countries_dict))
{'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'], 'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'], 'North America': ['Antigua and Barbuda', 'Barbados'], 'Africa': ['Angola'], 'South America': ['Argentina'], 'Oceania': ['Australia']}
我有以下字典,我想进行反向查找。
countries_dict = {'Andorra': ('Europe', 'Andorra la Vella'),
'Afghanistan': ('Asia', 'Kabul'),
'Antigua and Barbuda': ('North America', "St. John's"),
'Albania': ('Europe', 'Tirana'),
'Armenia': ('Asia', 'Yerevan'),
'Angola': ('Africa', 'Luanda'),
'Argentina': ('South America', 'Buenos Aires'),
'Austria': ('Europe', 'Vienna'),
'Australia': ('Oceania', 'Canberra'),
'Azerbaijan': ('Asia', 'Baku'),
'Barbados': ('North America', 'Bridgetown'),
'Bangladesh': ('Asia', 'Dhaka'),
'Belgium': ('Europe', 'Brussels')}
我的代码如下所示:
def create_continents_dict(dct = dict) -> dict:
reversed_dictionary = {value[0] : key for (key, value) in dct.items()}
return reversed_dictionary
print(create_continents_dict(countries_dict))
{'Europe': 'Belgium', 'Asia': 'Bangladesh', 'North America': 'Barbados', 'Africa': 'Angola', 'South America': 'Argentina', 'Oceania': 'Australia'}
但是我只得到它查找的最后一个国家/地区作为值。我想要的是作为国家列表的值。使用上面的代码,我应该期望每个拥有相同大陆的国家都应该在列表中,对吗?
{'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'] 'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'], 'North America': ['Antigua and Barbuda', 'Barbados'], 'Africa': ['Angola'], 'South America': ['Argentina'], 'Oceania': ['Australia']}
您可以将 dict.setdefault()
与默认列表 ([]
) 一起使用,然后在其中附加国家/地区:
out = {}
for country, (continent, _) in countries_dict.items():
out.setdefault(continent, []).append(country)
print(out)
打印:
{'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'],
'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'],
'North America': ['Antigua and Barbuda', 'Barbados'],
'Africa': ['Angola'],
'South America': ['Argentina'],
'Oceania': ['Australia']}
你可以在这里使用collections.defaultdict
def reverse_dict(countries_dict):
reversed_dictionary = defaultdict(list)
for key, value in countries_dict.items():
reversed_dictionary[value[0]].append(key)
return reversed_dictionary
>>> reverse_dict(countries_dict)
defaultdict(<class 'list'>,
{'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'],
'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'],
'North America': ['Antigua and Barbuda', 'Barbados'],
'Africa': ['Angola'],
'South America': ['Argentina'],
'Oceania': ['Australia']})
尝试
from collections import defaultdict
countries_dict = {'Andorra': ('Europe', 'Andorra la Vella'),
'Afghanistan': ('Asia', 'Kabul'),
'Antigua and Barbuda': ('North America', "St. John's"),
'Albania': ('Europe', 'Tirana'),
'Armenia': ('Asia', 'Yerevan'),
'Angola': ('Africa', 'Luanda'),
'Argentina': ('South America', 'Buenos Aires'),
'Austria': ('Europe', 'Vienna'),
'Australia': ('Oceania', 'Canberra'),
'Azerbaijan': ('Asia', 'Baku'),
'Barbados': ('North America', 'Bridgetown'),
'Bangladesh': ('Asia', 'Dhaka'),
'Belgium': ('Europe', 'Brussels')}
d = defaultdict(list)
for k,v in countries_dict.items():
d[v[0]].append(k)
print(d)
输出
defaultdict(<class 'list'>, {'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'], 'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'], 'North America': ['Antigua and Barbuda', 'Barbados'], 'Africa': ['Angola'], 'South America': ['Argentina'], 'Oceania': ['Australia']})
def create_continents_dict(dct = dict) -> dict:
reversed_dictionary = {}
for key, value in dct.items():
if value[0] not in reversed_dictionary.keys():
reversed_dictionary[value[0]] = []
reversed_dictionary[value[0]].append(key)
return reversed_dictionary
输出:
print(create_continents_dict(countries_dict))
{'Europe': ['Andorra', 'Albania', 'Austria', 'Belgium'], 'Asia': ['Afghanistan', 'Armenia', 'Azerbaijan', 'Bangladesh'], 'North America': ['Antigua and Barbuda', 'Barbados'], 'Africa': ['Angola'], 'South America': ['Argentina'], 'Oceania': ['Australia']}