"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo realizar una fusión profunda de diccionarios anidados en Python?

¿Cómo realizar una fusión profunda de diccionarios anidados en Python?

Publicado el 2025-03-22
Navegar:668

How to Perform a Deep Merge of Nested Dictionaries in Python?

profunda fusión de diccionarios de diccionarios en python

fusionar múltiples diccionarios con claves anidadas puede ser una tarea desafiante. Consideremos el siguiente ejemplo:

dict1 = {
    1: {"a": {"A"}},
    2: {"b": {"B"}}
}

dict2 = {
    2: {"c": {"C"}},
    3: {"d": {"D"}}
}

La salida deseada es:

dict3 = {
    1: {"a": {"A"}},
    2: {"b": {"B"}, "c": {"C"}},
    3: {"d": {"D"}}
}

Para lograr esta fusión profunda, podemos utilizar una función recursiva:

def merge(a: dict, b: dict, path=[]):
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                merge(a[key], b[key], path   [str(key)])
            else:
                a[key] = b[key]
        else:
            a[key] = b[key]

    return a

Esta función toma dos diccionarios, A y B, y una ruta que realiza un seguimiento de la ubicación actual en la estructura anidada. Se itera a través de las teclas en B y verifica si la clave correspondiente existe en a. Si los valores en esa clave son ambos diccionarios, llama a la función de fusión de manera recursiva para fusionar esos subdictorios. De lo contrario, actualiza el valor en A con el valor de b.

Para el ejemplo Dicts anterior, la función de fusión produciría el resultado deseado:

print(merge(dict1, dict2))

el resultado sería:

{
    1: {'a': {'A'}},
    2: {'b': {'B'}, 'c': {'C'}},
    3: {'d': {'D'}}
}

nota: Esta función muta el primer diccionario, a. Si desea preservar su contenido, puede hacer una copia antes de fusionar, por ejemplo, fusionar (dict (a), b).

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3