Python - Inversión de diccionario

 
Vista:
sin imagen de perfil

Inversión de diccionario

Publicado por Álvaro (5 intervenciones) el 24/06/2017 13:44:15
Buenos días.

Me gustaría saber si hay alguna función sencilla que me permita "invertir" un diccionario. Ejemplifico mi pregunta:

yo tengo un diccionario como el siguiente dic = {'Pos 1': {'Pos 2': 2, 'Pos 3': 3}, 'Pos 2': {'Pos 3': 4}}, y la solución inversa debería ser: dic_inv = {'Pos 2': {'Pos 1': 2}, 'Pos 3': {'Pos 1': 3, 'Pos 2': 4}}

Muchas gracias.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Inversión de diccionario

Publicado por kip (257 intervenciones) el 25/06/2017 02:42:33
Hola, intenta con la siguiente funcion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from collections import defaultdict
 
def inverter(dic, key=None):
    newDict = defaultdict(dict)
    for k, v in dic.items():
        if not isinstance(v, dict):
            if not key:
                newDict[v] =  k
            else:
                newDict[k].update({key: v})
        else:
            v2 = inverter(v, k)
            for k2 in v2:
                if k2 in newDict:
                    newDict[k2].update(v2[k2])
                else:
                    newDict[k2] = v2[k2]
    return dict(newDict)

La usarias asi:

1
2
3
dic = {'Pos 1': {'Pos 2': 2, 'Pos 3': 3}, 'Pos 2': {'Pos 3': 4}}
dic_inv = inverter(dic)
print(dic_inv)

1
{'Pos 2': {'Pos 1': 2}, 'Pos 3': {'Pos 1': 3, 'Pos 2': 4}}

Yo en la funcion siempre hago la extraccion de los key dentro de los valores de cada key, la ajuste para tu caso especifico, tendra un comportamiento raro si se usa con una estructura de dict diferente.

Pruebala y nos cuentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 34
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Inversión de diccionario

Publicado por Richard Miguel (10 intervenciones) el 14/07/2017 18:58:38
Es verdad que deberia usarlo con cuidado, por ejempl, muchas veces trabajpo con diccionarios cuyo contenido son tambien diccionarios. No se podria usar esta forma, pues un diccionario no puede ser 'key'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Urban_WildCat

Inversión de diccionario

Publicado por Urban_WildCat (4 intervenciones) el 26/06/2017 02:21:09
Que yo recuerde los diccionarios en python no tienen orden ni indexación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar