我有一个嵌套的字典,它显示了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'))
我知道我做错了,我想这与球队在字典中是以列表形式存在的事实有关。这是我试过的代码,但没有用。. 当我运行程序时,它打印出第一行,但当我要求它打印出钥匙时,它却打印出了 "Toronto Blue Jays"
它返回 "key doesn't exist"
. 任何帮助将是非常感激的
你是对的,球队是在一个列表中是什么搞乱了它。
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"
作为一个键!
你可以通过迭代原来的dict来建立反向的dict,并以 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}