Python: diccionarios Distinct Flatten

A veces, mientras trabajamos con diccionarios, podemos tener claves que en sí mismas forman parte de anidamientos muy complejos y deseamos extraer todas las claves y valores de anidamientos de claves particulares en una lista separada. Este tipo de problema puede tener aplicaciones en muchos dominios, como el desarrollo web. Analicemos ciertas formas en que se puede realizar esta tarea.
Método #1: Usar loop + isinstance() + lista de comprensión 
La combinación de las funciones anteriores se puede usar para resolver este problema. En esto, realizamos la tarea de aplanar el diccionario usando comprobaciones con isinstance() y loop. Por último, se utiliza la comprensión de listas para compilar el resultado en forma de lista de diccionario.
 

Python3

# Python3 code to demonstrate working of 
# Distinct Flatten dictionaries
# Using loop + isinstance() + list comprehension
  
def flatten(temp_dict, temp_list):
    for key, val in temp_dict.items():
        if isinstance(val, dict):
            temp_list.append(key)
            flatten(val, temp_list)
        else:
            temp_list.extend([key, val])
    return temp_list
  
# initializing dictionary
test_dict = {'gfg' : {'is' : 4, "best" : 10}, 'is' : {'for' : { 'geeks' : 8 }}}
  
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
  
# Distinct Flatten dictionaries
# Using loop + isinstance() + list comprehension
res = [flatten(val, [key]) for key, val in test_dict.items()]
  
# printing result 
print("The flattened dictionary elements : " + str(res)) 
Producción : 

The original dictionary is : {'is': {'for': {'geeks': 8}}, 'gfg': {'is': 4, 'best': 10}} 
The flattened dictionary elements : [['is', 'for', 'geeks', 8], ['gfg', 'is', 4, 'best', 10]]  

 
Método n.º 2: Uso de yield + isinstance() 
Esta tarea también se puede realizar mediante una combinación de las funciones anteriores. En esto, usamos la representación dinámica de datos usando el rendimiento para hacer que el proceso sea compacto y legible.
 

Python3

# Python3 code to demonstrate working of 
# Distinct Flatten dictionaries
# Using yield + isinstance()
  
def flatten(temp_dict):
    if isinstance(temp_dict, dict):
        for key, val in temp_dict.items():
            yield key
            yield from flatten(val)
    else:
        yield temp_dict
  
# initializing dictionary
test_dict = {'gfg' : {'is' : 4, "best" : 10}, 'is' : {'for' : { 'geeks' : 8 }}}
  
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
  
# Distinct Flatten dictionaries
# Using yield + isinstance()
res = [[key, *flatten(val)] for key, val in test_dict.items()]
  
# printing result 
print("The flattened dictionary elements : " + str(res)) 
Producción : 

The original dictionary is : {'is': {'for': {'geeks': 8}}, 'gfg': {'is': 4, 'best': 10}} 
The flattened dictionary elements : [['is', 'for', 'geeks', 8], ['gfg', 'is', 4, 'best', 10]]  

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 *