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))
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))
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