A veces, mientras trabajamos con diccionarios de Python, podemos tener un problema en el que necesitamos convertir diccionarios anidados en tuplas mapeadas. Este tipo de problema puede ocurrir en el desarrollo web y la programación diaria. Analicemos ciertas formas en que se puede realizar esta tarea.
Entrada : test_dict = {‘gfg’: {‘x’: 5, ‘y’: 6, ‘z’: 3}, ‘mejor’: {‘x’: 8, ‘y’: 3, ‘z’: 5}} Salida : [(‘x’, (5, 8)), (‘y’, (6, 3)), (‘z’, (3, 5))] Entrada : test_dict = {‘gfg’ : {‘x’ : 5, ‘y’ : 6, ‘z’: 3}} Salida : [(‘x’, (5, )), (‘y’, (6, )), (‘z’ , (3, ))]
Método n.º 1: Usar comprensión de lista + expresión generadora La combinación de las funciones anteriores se puede usar para resolver este problema. En esto, realizamos las tareas de crear la tupla utilizando la comprensión de listas y la expresión del generador ayuda a agrupar, extrayendo valores utilizando valores().
Python3
# Python3 code to demonstrate working of # Convert Nested dictionary to Mapped Tuple # Using list comprehension + generator expression # initializing dictionary test_dict = {'gfg' : {'x' : 5, 'y' : 6}, 'is' : {'x' : 1, 'y' : 4}, 'best' : {'x' : 8, 'y' : 3}} # printing original dictionary print("The original dictionary is : " + str(test_dict)) # Convert Nested dictionary to Mapped Tuple # Using list comprehension + generator expression res = [(key, tuple(sub[key] for sub in test_dict.values())) for key in test_dict['gfg']] # printing result print("The grouped dictionary : " + str(res))
Método #2: Uso de defaultdict() + bucle Esta es otra forma más en la que se puede realizar esta tarea. En esto, realizamos la tarea de mapear usando defaultdict(), de claves de diccionarios anidados y recreamos la lista de valores usando loop. Este método es útil para versiones anteriores de Python.
Python3
# Python3 code to demonstrate working of # Convert Nested dictionary to Mapped Tuple # Using defaultdict() + loop from collections import defaultdict # initializing dictionary test_dict = {'gfg' : {'x' : 5, 'y' : 6}, 'is' : {'x' : 1, 'y' : 4}, 'best' : {'x' : 8, 'y' : 3}} # printing original dictionary print("The original dictionary is : " + str(test_dict)) # Convert Nested dictionary to Mapped Tuple # Using defaultdict() + loop res = defaultdict(tuple) for key, val in test_dict.items(): for ele in val: res[ele] += (val[ele], ) # printing result print("The grouped dictionary : " + str(list(res.items()))
La Complejidad de Tiempo y Espacio es la misma para ambos métodos:
Complejidad temporal: O(n 2 )
Complejidad espacial: O(n)
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