【问题标题】:Using value to get key correspondent to that value in a nested dictionary that has a list for each key使用值在嵌套字典中获取与该值对应的键,该字典中每个键都有一个列表
【发布时间】:2020-08-20 17:44:42
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 领悟是最优雅的方式
    【解决方案2】:

    你说得对,列表中的团队搞砸了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 2012-05-21
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 2018-08-23
      相关资源
      最近更新 更多