Вопрос-Ответ

Reverse / invert a dictionary mapping

Перевернуть сопоставление словаря

Учитывая словарь следующим образом:

my_map = {'a': 1, 'b': 2}

Как можно инвертировать это сопоставление, чтобы получить:

inv_map = {1: 'a', 2: 'b'}
Переведено автоматически
Ответ 1

Python 3+:

inv_map = {v: k for k, v in my_map.items()}

Python 2:

inv_map = {v: k for k, v in my_map.iteritems()}
Ответ 2

Предполагается, что значения в dict уникальны:

Python 3:

dict((v, k) for k, v in my_map.items())

Python 2:

dict((v, k) for k, v in my_map.iteritems())
Ответ 3

Если значения в my_map не уникальны:

Python 3:

inv_map = {}
for k, v in my_map.items():
inv_map[v] = inv_map.get(v, []) + [k]

Python 2:

inv_map = {}
for k, v in my_map.iteritems():
inv_map[v] = inv_map.get(v, []) + [k]
Ответ 4

Для этого необходимо сохранить тип вашего сопоставления (при условии, что это dict или dict подкласс):

def inverse_mapping(f):
return f.__class__(map(reversed, f.items()))
2023-08-19 10:33 python dictionary