Как я обмениваюсь ключами со значениями в словаре?

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

Например, скажите, что мой вход:

a = dict()
a['one']=1
a['two']=2

Я хотел бы, чтобы мой вывод был:

{1: 'one', 2: 'two'}

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

res = dict()
res[1] = 'one'
res[2] = 'two'

Какой-либо аккуратный Pythonic способ достигнуть этого?

84
задан pppery 1 November 2019 в 01:50
поделиться

5 ответов

Python 2:

res = dict((v,k) for k,v in a.iteritems())

Python 3 (спасибо @erik):

res = dict((v,k) for k,v in a.items())
135
ответ дан 24 November 2019 в 08:23
поделиться

res = dict (zip (a.values ​​(), a.keys () ))

14
ответ дан 24 November 2019 в 08:23
поделиться

Вы можете попробовать:

d={'one':1,'two':2}
d2=dict((value,key) for key,value in d.iteritems())
d2
  {'two': 2, 'one': 1}

Остерегайтесь, что вы не можете » reverse 'словарь if

  1. Несколько ключей имеют одно и то же значение. Например {'один': 1, 'два': 1} . В новом словаре может быть только один элемент с ключом 1 .
  2. Одно или несколько значений не хэшируются. Например, {'one': [1]} . [1] - допустимое значение, но не действительный ключ.

См. эту ветку в списке рассылки python для обсуждения этой темы.

18
ответ дан 24 November 2019 в 08:23
поделиться
new_dict = dict (zip(my_dict.values(),my_dict.keys()))
53
ответ дан 24 November 2019 в 08:23
поделиться

Начиная с Python 2.7, включая 3.0+, существует, возможно, более короткая и более читаемая версия:

>>> my_dict = {'x':1, 'y':2, 'z':3}
>>> {v: k for k, v in my_dict.items()}
{1: 'x', 2: 'y', 3: 'z'}
44
ответ дан 24 November 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: