Python – Inversión en diccionario anidado

Dado un diccionario anidado, realice la inversión de claves, es decir, el anidado más interno se convierte en el más externo y viceversa.

Entrada : test_dict = {“a”: {“b”: {}},
“d”: {“e”: {}},
“f”: {“g”: {}}
Salida : {‘b’: {‘a’: {}}, ‘e’: {‘d’: {}}, ‘g’: {‘f’: {}}
Explicación : diccionarios anidados invertidos como claves de diccionario externas y viz-a-vis.

Entrada : test_dict = {“a”: {“b”: { “c”: {}}}}
Salida : {‘c’: {‘b’: {‘a’: {}}}}
Explicación : solo un llave única, mapeo invertido hasta profundidad.

Método: Usar bucle + recursividad

Esta es la forma bruta en la que se puede realizar esta tarea. En esto, extraemos todas las rutas de afuera hacia adentro para cada clave usando recursividad y luego usamos esto para revertir el orden en el resultado.

Python3

# Python3 code to demonstrate working of 
# Inversion in nested dictionary
# Using loop + recursion
  
# utility function to get all paths till end 
def extract_path(test_dict, path_way):
    if not test_dict:
        return [path_way]
    temp = []
    for key in test_dict:
        temp.extend(extract_path(test_dict[key], path_way + [key]))
    return temp
  
# function to compute inversion
def hlper_fnc(test_dict):
    all_paths = extract_path(test_dict, [])
    res = {}
    for path in all_paths:
        front = res
        for ele in path[::-1]:
            if ele not in front :
                front[ele] = {}
            front = front[ele]
    return res
  
# initializing dictionary
test_dict = {"a" : {"b" : {"c" : {}}},
             "d" : {"e" : {}},
             "f" : {"g" : {"h" : {}}}}
  
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
  
# calling helper function for task 
res = hlper_fnc(test_dict)
  
# printing result 
print("The inverted dictionary : " + str(res)) 
Producción

The original dictionary is : {'a': {'b': {'c': {}}}, 'd': {'e': {}}, 'f': {'g': {'h': {}}}}
The inverted dictionary : {'c': {'b': {'a': {}}}, 'e': {'d': {}}, 'h': {'g': {'f': {}}}}

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 *