Перевернуть сопоставление словаря
Учитывая словарь следующим образом:
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())
dict((v, k) for k, v in my_map.iteritems())
Ответ 3
Если значения в my_map не уникальны:
my_map
inv_map = {}for k, v in my_map.items(): inv_map[v] = inv_map.get(v, []) + [k]
inv_map = {}for k, v in my_map.iteritems(): inv_map[v] = inv_map.get(v, []) + [k]
Ответ 4
Для этого необходимо сохранить тип вашего сопоставления (при условии, что это dict или dict подкласс):
dict
def inverse_mapping(f): return f.__class__(map(reversed, f.items()))