Maison >développement back-end >Tutoriel Python >Comment puis-je fusionner en profondeur des dictionnaires imbriqués en Python et gérer les conflits ?

Comment puis-je fusionner en profondeur des dictionnaires imbriqués en Python et gérer les conflits ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-04 22:55:141227parcourir

How Can I Deep Merge Nested Dictionaries in Python and Handle Conflicts?

Fusion approfondie de dictionnaires de dictionnaires en Python

Lorsque vous travaillez avec des structures de données complexes, il devient souvent nécessaire de fusionner plusieurs dictionnaires pour créer un ensemble unifié. représentation. Un défi particulier se pose lorsque les dictionnaires contiennent des structures imbriquées de dictionnaires, appelées « fusion profonde ».

Pour relever ce défi, nous pouvons tirer parti d'une approche récursive en Python. La fonction suivante fusionne efficacement les dictionnaires tout en gérant les conflits avec élégance :

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)])
            elif a[key] != b[key]:
                raise Exception('Conflict at ' + '.'.join(path + [str(key)]))
        else:
            a[key] = b[key]
    return a

En cas de valeurs conflictuelles, la fonction déclenchera une exception.

Pour illustrer l'utilisation, considérons l'exemple suivant :

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

En utilisant merge(dict1, dict2), nous pouvons obtenir le résultat souhaité résultat :

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

Cette approche garantit que l'imbrication dans les dictionnaires est gérée efficacement, permettant la fusion en profondeur de structures de données complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn