Python – Aplanar diccionario anidado a array

A veces, mientras trabajamos con datos, podemos tener un problema en el que necesitamos convertir el diccionario anidado en Matrix, cada anidamiento comprende una fila diferente en la array. Esto puede tener aplicación en muchos dominios de datos. Analicemos ciertas formas en que se puede realizar esta tarea.
Método #1: Usando loop + zip() + map() 
La combinación de las funciones anteriores se puede usar para realizar esta tarea. En esto, usamos la fuerza bruta para aplanar las claves del diccionario y luego usamos map() y zip() para alinearlas como filas de array.
 

Python3

# Python3 code to demonstrate working of
# Flatten Nested Dictionary to Matrix
# using zip() + loop + map()
   
# initializing dictionary
test_dict = {'Gfg1' : {'CS':1, 'GATE' : 2},
             'Gfg2' : {'CS':2, 'GATE' : 3},
             'Gfg3' : {'CS':4, 'GATE' : 5}}
   
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
 
# Flatten Nested Dictionary to Matrix
# using zip() + loop + map()
temp = list(test_dict.values())
sub = set()
for ele in temp:
    for idx in ele:
        sub.add(idx)
res = []
res.append(sub)
for key, val in test_dict.items():
    temp2 = []
    for idx in sub:
        temp2.append(val.get(idx, 0))
    res.append(temp2)
 
res = [[idx for idx, val in test_dict.items()]] + list(map(list, zip(*res)))
   
# printing result 
print("The Grouped dictionary list is : " + str(res))
Producción : 

El diccionario original es: {‘Gfg3’: {‘GATE’: 5, ‘CS’: 4}, ‘Gfg1’: {‘GATE’: 2, ‘CS’: 1}, ‘Gfg2’: {‘GATE’ : 3, ‘CS’: 2}} 
La lista de diccionarios agrupados es: [[‘Gfg3’, ‘Gfg1’, ‘Gfg2’], [‘GATE’, 5, 2, 3], [‘CS’, 4, 1, 2]] 

 

 
Método #2: Uso de union() + comprensión de lista 
La combinación de los métodos anteriores se puede utilizar para realizar esta tarea. En esto, calculamos la unión usando union() en lugar de los bucles anidados. El resultado se compila utilizando la comprensión de listas.
 

Python3

# Python3 code to demonstrate working of
# Flatten Nested Dictionary to Matrix
# using union() + list comprehension
   
# initializing dictionary
test_dict = {'Gfg1' : {'CS':1, 'GATE' : 2},
             'Gfg2' : {'CS':2, 'GATE' : 3},
             'Gfg3' : {'CS':4, 'GATE' : 5}}
   
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
 
# Flatten Nested Dictionary to Matrix
# using union() + list comprehension
temp = set().union(*test_dict.values())
res = [list(test_dict.keys())]
res += [[key] + [sub.get(key, 0) for sub in test_dict.values()] for key in temp]
   
# printing result 
print("The Grouped dictionary list is : " + str(res))
Producción : 

El diccionario original es: {‘Gfg3’: {‘GATE’: 5, ‘CS’: 4}, ‘Gfg1’: {‘GATE’: 2, ‘CS’: 1}, ‘Gfg2’: {‘GATE’ : 3, ‘CS’: 2}} 
La lista de diccionarios agrupados es: [[‘Gfg3’, ‘Gfg1’, ‘Gfg2’], [‘GATE’, 5, 2, 3], [‘CS’, 4, 1, 2]] 

 

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *