Python: Jerarquía de intercambio en diccionarios anidados

A veces, mientras trabajamos con diccionarios de Python, podemos tener un problema en el que necesitamos realizar un intercambio de jerarquía de diccionarios anidados. Este problema puede tener aplicación en dominios que requieren la reestructuración del diccionario. Analicemos ciertas formas en que se puede realizar esta tarea.
 

Entrada : test_dict = {‘Gfg’: { ‘a’: [1, 3, 7, 8], ‘b’: [4, 9], ‘c’: [0, 7]}} 
Salida : {‘c ‘: {‘Gfg’: [0, 7]}, ‘b’: {‘Gfg’: [4, 9]}, ‘a’: {‘Gfg’: [1, 3, 7, 8]}}
Entrada : test_dict = {‘Gfg’: {‘mejor’: [1, 3, 4]}} 
Salida : {‘mejor’: {‘Gfg’: [1, 3, 4]}} 
 

Método #1: Usando loop + items() 
La combinación de las funciones anteriores se puede usar para resolver este problema. En esto, iteramos el diccionario y reestructuramos usando fuerza bruta. El items() se usa para extraer todos los pares clave-valor del diccionario.
 

Python3

# Python3 code to demonstrate working of
# Swapping Hierarchy in Nested Dictionaries
# Using loop + items()
 
# initializing dictionary
test_dict = {'Gfg': { 'a' : [1, 3], 'b' : [3, 6], 'c' : [6, 7, 8]},
             'Best': { 'a' : [7, 9], 'b' : [5, 3, 2], 'd' : [0, 1, 0]}}
 
# printing original dictionary
print("The original dictionary : " + str(test_dict))
 
# Swapping Hierarchy in Nested Dictionaries
# Using loop + items()
res = dict()
for key, val in test_dict.items():
    for key_in, val_in in val.items():
        if key_in not in res:
            temp = dict()
        else:
            temp = res[key_in]
        temp[key] = val_in
        res[key_in] = temp
 
# printing result
print("The rearranged dictionary : " + str(res))
Producción : 

El diccionario original: {‘Gfg’: {‘a’: [1, 3], ‘c’: [6, 7, 8], ‘b’: [3, 6]}, ‘Best’: {‘d ‘: [0, 1, 0], ‘a’: [7, 9], ‘b’: [5, 3, 2]}} 
El diccionario reorganizado: {‘d’: {‘Best’: [0, 1, 0]}, ‘a’: {‘Gfg’: [1, 3], ‘Best’: [7, 9]}, ‘c’: {‘Gfg’: [6, 7, 8]}, ‘b’: {‘Gfg’: [3, 6], ‘Mejor’: [5, 3, 2]}} 

 

 
Método #2: Usando defaultdict() + bucle 
Esta es otra forma de fuerza bruta para resolver este problema. En esto, reducimos un paso de prueba clave usando defaultdict() en lugar de un diccionario convencional.
 

Python3

# Python3 code to demonstrate working of
# Swapping Hierarchy in Nested Dictionaries
# Using  defaultdict() + loop
from collections import defaultdict
 
# initializing dictionary
test_dict = {'Gfg': { 'a' : [1, 3], 'b' : [3, 6], 'c' : [6, 7, 8]},
             'Best': { 'a' : [7, 9], 'b' : [5, 3, 2], 'd' : [0, 1, 0]}}
 
# printing original dictionary
print("The original dictionary : " + str(test_dict))
 
# Swapping Hierarchy in Nested Dictionaries
# Using  defaultdict() + loop
res = defaultdict(dict)
for key, val in test_dict.items():
    for key_in, val_in in val.items():
        res[key_in][key] = val_in
 
# printing result
print("The rearranged dictionary : " + str(dict(res)))
Producción : 

El diccionario original: {‘Gfg’: {‘a’: [1, 3], ‘c’: [6, 7, 8], ‘b’: [3, 6]}, ‘Best’: {‘d ‘: [0, 1, 0], ‘a’: [7, 9], ‘b’: [5, 3, 2]}} 
El diccionario reorganizado: {‘d’: {‘Best’: [0, 1, 0]}, ‘a’: {‘Gfg’: [1, 3], ‘Best’: [7, 9]}, ‘c’: {‘Gfg’: [6, 7, 8]}, ‘b’: {‘Gfg’: [3, 6], ‘Mejor’: [5, 3, 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 *