ключи переключения и значения в словаре в python

Скажем, у меня есть такой словарь:

my_dict = {2:3, 5:6, 8:9} 

Есть ли способ, которым я могу переключать ключи и значения, чтобы получить:

 {3:2, 6:5, 9:8} 

6 Solutions collect form web for “ключи переключения и значения в словаре в python”

 my_dict2 = dict((y,x) for x,y in my_dict.iteritems()) 

Если вы используете python 2.7 или 3.x, вместо этого вы можете использовать понимание словаря:

 my_dict2 = {y:x for x,y in my_dict.iteritems()} 

редактировать

Как отмечено в комментариях JBernardo, для python 3.x вам нужно использовать items вместо iteritems

Используйте этот код (тривиально измененный) из принятого ответа на Python обратном / инвертируйте сопоставление :

 dict((v,k) for k, v in my_dict.iteritems()) 

Обратите внимание, что это предполагает, что значения в оригинальном словаре уникальны. В противном случае вы получите дубликаты ключей в результирующем словаре, и это недопустимо.

И, как указывает @wim, он также предполагает, что значения хешируются. См. Глоссарий Python, если вы не уверены в том, что есть и не хешируется.

Попробуй это:

 my_dict = {2:3, 5:6, 8:9} new_dict = {} for k, v in my_dict.items(): new_dict[v] = k 

может быть:

flipped_dict = dict(zip(my_dict.values(), my_dict.keys()))

Иногда условие, что все значения уникальны, не будет выполняться, и в этом случае ответы выше будут уничтожать любые повторяющиеся значения.

Следующее перечисляет значения, которые могут быть дублированы в список:

 from itertools import count dict([(a,[list(d.keys())[i] for i,j in zip(count(), d.values())if j==a in set(d.values())]) 

Я уверен, что есть лучший (не-list-comp) метод, но у меня была проблема с более ранними ответами, поэтому я подумал, что предоставил бы мое решение, если у других будет аналогичный случай использования.

PS Не ожидайте, что дикт останется аккуратно устроенным после любых изменений оригинала! Этот метод является одноразовым использованием только на статическом dict – вы были предупреждены!

 my_dict = { my_dict[k]:k for k in my_dict} 
  • Словарь Python vs Если скорость сообщения
  • Python сравнивает строку с несколькими регулярными выражениями
  • Выбор между различными заменами ключей в Python - словаре или if-elif-else?
  • Как выполнять поиск в регулярных выражениях в Python?
  • Что такое эквивалент Python для оператора case / switch?
  •  
    Interesting Posts for Van-Lav

    Flask, развернутый с помощью twistd: Не удалось загрузить приложение: объект «NoneType» не имеет атрибута «startswith»

    Pandon Pandas Если значение в столбце B = равно , замените столбец A на «T»

    Как показать профиль пользователя с помощью Django?

    Как проверить, существует ли строка с определенным значением столбца в pandas dataframe

    Как сделать итерируемый класс в Python, в котором разрешен только определенный тип?

    Flask не может разрешить статические файлы

    Как правильно классифицировать многоклассы с NLTK?

    Передача дополнительных аргументов объекту обратного вызова python (win32com.client.dispatchWithEvents)

    Почему easy_install извлекает некоторые яйца python, а не другие?

    _pickle в python3 не работает для большой экономии данных

    time.sleep () требуется, чтобы QThread реагировал?

    подходит множество параметрических кривых с scipy

    Нельзя нажать кнопку

    Django HttpResponseRedirect

    IndexError: не может принудительно вводить в себя фрагмент типа tensorvariable to integer

    Python - лучший язык программирования в мире.