"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como realizar uma profunda mesclagem de dicionários aninhados em Python?

Como realizar uma profunda mesclagem de dicionários aninhados em Python?

Postado em 2025-03-22
Navegar:704

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

mesclagem profunda dos dicionários de dicionários em python

mesclando vários dicionários com chaves aninhadas pode ser uma tarefa desafiadora. Vamos considerar o seguinte exemplo:

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

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

a saída desejada é:

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

Para alcançar essa mesclagem profunda, podemos utilizar uma função 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 função leva dois dicionários, A e B, e um caminho que acompanha o local atual na estrutura aninhada. Ele itera através das chaves em B e verifica se a tecla correspondente existe em a. Se os valores nessa chave são ambos os dicionários, ela chama a função de mesclagem recursivamente para mesclar esses subdicionários. Caso contrário, ele atualiza o valor em A com o valor de b.

Para o exemplo dita acima, a função Merge produziria o resultado desejado:

print(merge(dict1, dict2))

a saída seria: 1: {'a': {'a'}}, 2: {'b': {'b'}, 'c': {'c'}}, 3: {'d': {'d'}} }

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

Esta função muda o primeiro dicionário, a. Se você deseja preservar seu conteúdo, pode fazer uma cópia antes da fusão, por exemplo, Merge (dict (a), b).

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3