Использование значения для получения ключа, соответствующего этому значению, во вложенном словаре, в котором есть список для каждого ключа - PullRequest
1 голос
/ 06 мая 2020

У меня есть вложенный словарь, который показывает подразделения каждой спортивной команды 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". Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

3 голосов
/ 06 мая 2020

Вы можете построить обратный диктант, перебирая исходный и обновляя его с помощью dict.fromkeys:

teams_dict = {}
for division, teams in Divisions_dict.items():
    teams_dict.update(dict.fromkeys(teams, division))

В качестве альтернативы вы можете использовать понимание dict:

teams_dict = {team: division
              for division, teams in Divisions_dict.items()
              for team in teams}
1 голос
/ 06 мая 2020

Вы правы, что команды в списке - вот что испортило.

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, учтет это. Имейте в виду, что это также вернет истину, если значение, которое вы ищете, является подстрокой значения, которого нет в списке. Например, если вы искали '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" в качестве ключа!

...