Invertir/invertir una asignación de diccionario
Dado un diccionario como este:
my_map = {'a': 1, 'b': 2}
¿Cómo se puede invertir este mapa para obtener:
inv_map = {1: 'a', 2: 'b'}
Aceptado
Pitón 3+:
inv_map = {v: k for k, v in my_map.items()}
Pitón 2:
inv_map = {v: k for k, v in my_map.iteritems()}
Suponiendo que los valores del dict son únicos:
Pitón 3:
dict((v, k) for k, v in my_map.items())
Pitón 2:
dict((v, k) for k, v in my_map.iteritems())
Si los valores en my_map
no son únicos:
Pitón 3:
inv_map = {}
for k, v in my_map.items():
inv_map[v] = inv_map.get(v, []) + [k]
Pitón 2:
inv_map = {}
for k, v in my_map.iteritems():
inv_map[v] = inv_map.get(v, []) + [k]
Para hacer esto preservando el tipo de su mapeo (suponiendo que sea una dict
o una dict
subclase):
def inverse_mapping(f):
return f.__class__(map(reversed, f.items()))