使用值在嵌套字典中获取对应于该值的键,该字典具有每个键的列表

Using value to get key correspondent to that value in a nested dictionary that has a list for each key

我有一个嵌套字典,它显示了每个 MLB 运动队的分区,分区是键,值是该分区中的球队。每个键大约有 5 个值。我需要做的是反向映射它,以便我能够 return 给定团队的划分。

    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" 的密钥时,它 returns "key doesn't exist"。任何帮助将不胜感激!

您可以通过迭代原始字典并使用 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}

你是对的,团队在列表中是什么搞砸了。

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 的细微修改将说明这一点。请记住,如果您要搜索的值是不在列表中的值的子字符串,那么 return 也会为真。例如,如果您正在寻找 '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"

顺便说一句,我建议 return 使用 None 而不是 "key doesn't exist"。它是 None 的用途之一,现在您可以将 "key doesn't exist" 作为密钥!