使用值获取与嵌套字典中该值对应的键,该字典包含每个键的列表

时间:2020-05-05 21:54:43

标签: python python-3.x dictionary nested key-value

我有一个嵌套的字典,其中显示了每个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"。任何帮助将不胜感激!

2 个答案:

答案 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"作为密钥了!

相关问题