Invertir/invertir una asignación de diccionario

Resuelto Brian M. Hunt asked hace 15 años • 33 respuestas

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'}
Brian M. Hunt avatar Jan 27 '09 21:01 Brian M. Hunt
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()}
SilentGhost avatar Jan 27 '2009 15:01 SilentGhost

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())
 avatar Jan 27 '2009 14:01

Si los valores en my_mapno 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]
Robert Rossney avatar Jan 27 '2009 21:01 Robert Rossney

Para hacer esto preservando el tipo de su mapeo (suponiendo que sea una dicto una dictsubclase):

def inverse_mapping(f):
    return f.__class__(map(reversed, f.items()))
fs. avatar Nov 05 '2009 10:11 fs.