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