Python: лучший способ обмена ключами со значениями в словаре? - PullRequest
77 голосов
/ 23 июня 2009

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

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

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

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

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

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

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

Любой изящный Pythonian способ достигнуть этого?

Спасибо

Ответы [ 16 ]

6 голосов
/ 28 июля 2011

Предложение по улучшению ответа Хавьера:

dict(zip(d.values(),d))

Вместо d.keys() вы можете написать просто d, потому что если вы просматриваете словарь с помощью итератора, он возвращает ключи соответствующего словаря.

Ex. для этого поведения:

d = {'a':1,'b':2}
for k in d:
 k
'a'
'b'
2 голосов
/ 15 июля 2018

Может быть легко сделано с помощью словарного понимания:

{d[i]:i for i in d}
2 голосов
/ 08 августа 2015
dict(map(lambda x: x[::-1], YourDict.items()))

.items() возвращает список кортежей (key, value). map() просматривает элементы списка и применяет lambda x:[::-1] к каждому своему элементу (кортежу), чтобы обратить его вспять, поэтому каждый кортеж становится (value, key) в новом списке, исключенном из карты. Наконец, dict() делает диктат из нового списка.

1 голос
/ 15 апреля 2016

Добавление решения на месте:

>>> d = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
>>> for k in list(d.keys()):
...     d[d.pop(k)] = k
... 
>>> d
{'two': 2, 'one': 1, 'four': 4, 'three': 3}

В Python3 очень важно использовать list(d.keys()), поскольку dict.keys возвращает представление ключей. Если вы используете Python2, достаточно d.keys().

1 голос
/ 09 августа 2014

Если вы используете Python3, он немного отличается:

res = dict((v,k) for k,v in a.items())
1 голос
/ 03 мая 2014

Использование loop : -

newdict = {} #Will contain reversed key:value pairs.

for key, value in zip(my_dict.keys(), my_dict.values()):
    # Operations on key/value can also be performed.
    newdict[value] = key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...