"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment effectuer une fusion profonde de dictionnaires imbriqués à Python?

Comment effectuer une fusion profonde de dictionnaires imbriqués à Python?

Publié le 2025-03-22
Parcourir:186

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

Fusion profonde des dictionnaires des dictionnaires dans python

fusionnant plusieurs dictionnaires avec des touches imbriquées peuvent être une tâche difficile. Considérons l'exemple suivant:

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

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

La sortie souhaitée est:

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

Pour réaliser cette fusion profonde, nous pouvons utiliser une fonction récursive:

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

Cette fonction prend deux dictionnaires, A et B, et un chemin qui garde une trace de l'emplacement actuel dans la structure imbriquée. Il itère à travers les clés en B et vérifie si la clé correspondante existe dans a. Si les valeurs de cette clé sont les deux dictionnaires, il appelle la fonction de fusion récursivement pour fusionner ces sous-dictionnaires. Sinon, il met à jour la valeur dans A avec la valeur de b.

pour l'exemple dict ci-dessus, la fonction de fusion produirait le résultat souhaité:

print(merge(dict1, dict2))

La sortie serait:

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

Remarque: Cette fonction mute le premier dictionnaire, a. Si vous souhaitez préserver son contenu, vous pouvez en faire une copie avant de fusionner, par exemple, fusionner (dict (a), b).

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3