Dado un diccionario con teclas unidas por un carácter dividido, la tarea es escribir un programa Python para convertir el diccionario en diccionarios anidados y agrupados.
Ejemplos
Entrada: test_dict = {«1-3»: 2, «1-8»: 10}, splt_chr = «-«
Salida: {‘1’: {‘3’: 2, ‘8’: 10}}
Explicación: 1 está vinculado a 3 con valor 2 y 8 con valor 10, por lo tanto, esos elementos están anidados y se asignan valores.
Entrada: test_dict = {“1-3”: 2, “8-7”: 0, “1-8”: 10, “8-6”: 15}, splt_chr = “-“
Salida: {‘1’: {‘3’: 2, ‘8’: 10}, ‘8’: {‘7’: 0, ‘6’: 15}}
Explicación: 1 está vinculado a 3 con valor 2 y 8 con valor 10, de manera similar, 8 está vinculado a 7 con valor 0 y 6 con valor 15, por lo tanto, esos elementos están anidados y se asignan valores.
Método #1: Usar loop + split()
En esto, realizamos la tarea de dividir las claves para aplanar usando split(). Y luego, la memorización de claves se realiza mediante el uso de un diccionario que agrega a sus diccionarios anidados otras claves anidadas similares encontradas.
Python3
# Python3 code to demonstrate working of # Group Hierarchy Splits of keys in Dictionary # Using loop + split() # initializing dictionary test_dict = {"1-3" : 2, "8-7" : 0, "1-8" : 10, "8-6" : 15} # printing original dictionary print("The original dictionary is : " + str(test_dict)) # initializing split char splt_chr = "-" res = dict() for key, val in test_dict.items(): ini_key, low_key = key.split(splt_chr) # check if key already present if ini_key not in res: res[ini_key] = dict() # add nested value if present key res[ini_key][low_key] = val # printing result print("The splitted dictionary : " + str(res))
The original dictionary is : {'1-3': 2, '8-7': 0, '1-8': 10, '8-6': 15} The splitted dictionary : {'1': {'3': 2, '8': 10}, '8': {'7': 0, '6': 15}}
Método #2: Usando defaultdict()
De manera similar al método anterior, la única diferencia es que se usa defaultdict() para la tarea de memorizar las claves de agrupación.
Python3
# Python3 code to demonstrate working of # Group Hierarchy Splits of keys in Dictionary # Using defaultdict() from collections import defaultdict # initializing dictionary test_dict = {"1-3" : 2, "8-7" : 0, "1-8" : 10, "8-6" : 15} # printing original dictionary print("The original dictionary is : " + str(test_dict)) # initializing split char splt_chr = "-" res = defaultdict(dict) for key, val in test_dict.items(): ini_key, low_key = key.split(splt_chr) # defaultdict eliminates check step res[ini_key][low_key] = val # printing result print("The splitted dictionary : " + str(dict(res)))
The original dictionary is : {'1-3': 2, '8-7': 0, '1-8': 10, '8-6': 15} The splitted dictionary : {'1': {'3': 2, '8': 10}, '8': {'7': 0, '6': 15}}
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