#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'}
Комментариев нет:
Отправить комментарий