Python: convierte el diccionario anidado en tupla asignada

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))
Salida: el diccionario original es: {‘gfg’: {‘x’: 5, ‘y’: 6}, ‘is’: {‘x’: 1, ‘y’: 4}, ‘best’: {‘ x’: 8, ‘y’: 3}} El diccionario agrupado: [(‘x’, (5, 1, 8)), (‘y’, (6, 4, 3))]

  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()))
Salida: el diccionario original es: {‘gfg’: {‘x’: 5, ‘y’: 6}, ‘is’: {‘x’: 1, ‘y’: 4}, ‘best’: {‘ x’: 8, ‘y’: 3}} El diccionario agrupado: [(‘x’, (5, 1, 8)), (‘y’, (6, 4, 3))]

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

Deja una respuesta

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