我有一个嵌套的字典,其中显示了每个MLB运动队的部门,部门是关键,值是该部门中的团队。每个键大约有5个值。我需要做的是反向映射它,以便我可以返回给定团队的划分。
Divisions_dict = {
'ALCentral' : ['Chicago White Sox' , 'Cleveland Indians' , 'Detroit Tigers' , 'Minnesota Twins' , 'Kansas City Royals'] ,
'ALEast' : ['New York Yankees' , 'Boston Red Sox', 'Tampa Bay Rays' , 'Toronto Blue Jays' , 'Baltimore Orioles'],
'Comeon' : 'hello'
}
def get_key(val):
for key, value in Divisions_dict.items():
if val == value:
return key
return "key doesn't exist"
print(get_key('hello'))
print(get_key('Toronto Blue Jays'))
我知道我做错了,并认为这与团队在词典中采用列表形式有关。 This is the code I have tried but to no avail。当我运行该程序时,它将打印第一行,但是当我要求它为"Toronto Blue Jays"
打印密钥时,它将返回"key doesn't exist"
。任何帮助将不胜感激!
答案 0 :(得分:3)
您可以通过迭代原始命令并使用dict.fromkeys
更新来构建反向命令:
teams_dict = {}
for division, teams in Divisions_dict.items():
teams_dict.update(dict.fromkeys(teams, division))
或者,您也可以使用字典理解:
teams_dict = {team: division
for division, teams in Divisions_dict.items()
for team in teams}
答案 1 :(得分:1)
您是对的,列表中的团队是在搞砸了。
def get_key(val):
for key, value in Divisions_dict.items():
if val == value or val in value:
return key
return "key doesn't exist"
添加or val in value
的轻微修改将解决此问题。请记住,如果要搜索的值是不在列表中的值的子字符串,则该值也将返回true。例如,如果您正在寻找'he'
,它将在'hello'
中找到它。如果您确实想确保不会发生这种情况,可以测试该值是否为字符串。
def get_key(val):
for key, value in Divisions_dict.items():
if isinstance(value, str):
if val == value:
return key
else:
if val in value:
return key
return "key doesn't exist"
顺便说一句,我建议返回类似None
而不是"key doesn't exist"
的东西。 None
的目的之一就是它,现在您可以将"key doesn't exist"
作为密钥了!