使用value在一个嵌套的字典中获取与该值对应的键,该字典中的每个键都有一个列表。

问题描述 投票:0回答:1

我有一个嵌套的字典,它显示了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". 任何帮助将是非常感激的

python-3.x dictionary for-loop nested key-value
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" 作为一个键!


3
投票

你可以通过迭代原来的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}
© www.soinside.com 2019 - 2024. All rights reserved.