Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Смена мест между ключами и их значениями

#python #python_3x


Имеется словарь:

>>>e2f = {
...    'dog': 'chien',
...    'cat': 'chat',
...    'walrus': 'morse',
...    }


Необходимо сделать так, чтобы имена значений находились на местах ключей,
а ключи, в свою очередь, находились на местах значений, к которым они присоединены.

Пробовал сделать подобным образом:

>>>f2e = list(e2f.items())
>>>f2e
>>>[('dog', 'chien'), ('cat', 'chat'), ('walrus', 'morse')]
>>>for x in f2e:
...    x.reverse()
...
Traceback (most recent call last):
  File "", line 2, in 
AttributeError: 'tuple' object has no attribute 'reverse'


И только после вспомнил, что кортежи неизменяемые :)

Посоветуйте, как быть?
    


Ответы

Ответ 1



Элементарно {v:k for k, v in e2f.items()}

Ответ 2



Нельзя применить reverse() к tuple, зато можно сделать reversed() (обращенную копию): dict(reversed(item) for item in e2f.items()) Но, конечно, применение reversed() для "обращения" кортежа из двух элементов - несколько избыточно.

Ответ 3



Чтобы поменять местами ключи и значения в словаре: f2e = dict(zip(e2f.values(), e2f.keys())) Если значения неуникальны, то последнее среди дубликатов выигрывает — это значит, результат может меняться в зависимости от конкретной реализации Питона и даже от запуска к запуску на некоторых версиях, так как Питон не гарантирует порядок записей для словарей.

Ответ 4



f2e={} f2e {} for english, french in e2f.items(): f2e[french]= english f2e {'chien': 'dog', 'chat': 'cat', 'morse': 'walrus'}

Комментариев нет:

Отправить комментарий