Python 反向查找字典

Python 反向查找字典,python,dictionary,reverse-lookup,Python,Dictionary,Reverse Lookup,我有下面的字典,我想做一个反向查找 countries_dict = {'Andorra': ('Europe', 'Andorra la Vella'), 'Afghanistan': ('Asia', 'Kabul'), 'Antigua and Barbuda': ('North America', "St. John's"), 'Albania': ('Europe', 'Tirana

我有下面的字典,我想做一个反向查找

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']}

您可以使用带有默认列表(
[]
)的
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']})
def反向指令(国家指令):
反向字典=默认字典(列表)
对于键,国家/地区中的值\u dict.items():
反向字典[值[0]]。追加(键)
返回字典
>>>反向指令(国家指令)
defaultdict(,
{‘欧洲’:[‘安道尔’、‘阿尔巴尼亚’、‘奥地利’、‘比利时’],
“亚洲”:[“阿富汗”、“亚美尼亚”、“阿塞拜疆”、“孟加拉国”],
“北美”:[“安提瓜和巴布达”、“巴巴多斯”],
“非洲”:[“安哥拉”],
“南美洲”:[“阿根廷”],
“大洋洲”:[“澳大利亚”]})

您可以在此处使用
集合。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']})
def反向指令(国家指令):
反向字典=默认字典(列表)
对于键,国家/地区中的值\u dict.items():
反向字典[值[0]]。追加(键)
返回字典
>>>反向指令(国家指令)
defaultdict(,
{‘欧洲’:[‘安道尔’、‘阿尔巴尼亚’、‘奥地利’、‘比利时’],
“亚洲”:[“阿富汗”、“亚美尼亚”、“阿塞拜疆”、“孟加拉国”],
“北美”:[“安提瓜和巴布达”、“巴巴多斯”],
“非洲”:[“安哥拉”],
“南美洲”:[“阿根廷”],
“大洋洲”:[“澳大利亚”]})
试试看

输出

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']})
defaultdict(,{'Europe':['Andorr','Alpha','Austria','Belgium','Asia':['Afghanistan','Armenia','Abazia','Bangladesh'],'North America':['Antigua and Barbuda','Barbados'],'Africa':['Angola'],'South America':['Argentina','Oceania','Oceania':
试试看

输出

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']})
defaultdict(,{'Europe':['Andorr','Alpha','Austria','Belgium','Asia':['Afghanistan','Armenia','Abazia','Bangladesh'],'North America':['Antigua and Barbuda','Barbados'],'Africa':['Angola'],'South America':['Argentina','Oceania','Oceania':
输出:

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']}
输出:

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']}