Maison > développement back-end > Tutoriel Python > Comment puis-je fusionner efficacement des dictionnaires imbriqués en Python ?

Comment puis-je fusionner efficacement des dictionnaires imbriqués en Python ?

Mary-Kate Olsen
Libérer: 2024-12-03 02:23:10
original
667 Les gens l'ont consulté

How Can I Efficiently Merge Nested Dictionaries in Python?

Fusionner des dictionnaires imbriqués en Python

En Python, nous rencontrons souvent des scénarios dans lesquels nous devons combiner plusieurs dictionnaires imbriqués. Cette tâche peut être difficile, surtout lorsque les dictionnaires ont des niveaux de profondeur variables et des conflits potentiels.

Pour fusionner des dictionnaires de dictionnaires et maintenir la hiérarchie, nous utilisons 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)])
            elif a[key] != b[key]:
                raise Exception('Conflict at ' + '.'.join(path + [str(key)]))
        else:
            a[key] = b[key]
    return a
Copier après la connexion

Cette fonction accepte deux dictionnaires, a et b, ainsi qu'un paramètre de chemin facultatif pour suivre le chemin actuel dans le dictionnaire fusionné. Il parcourt chaque clé de b et effectue les actions suivantes :

  • Si la clé existe dans a et que les deux valeurs sont des dictionnaires, il fusionne récursivement les deux dictionnaires et met à jour le chemin.
  • Si la clé existe dans a mais que les valeurs ne sont pas des dictionnaires, il vérifie les conflits. Si un conflit est détecté, une exception est levée.
  • Si la clé n'existe pas dans a, il l'ajoute à a avec la valeur de b.

Enfin, le fusionné le dictionnaire a est renvoyé.

Pour fusionner plusieurs dictionnaires, vous pouvez utiliser réduire pour combiner tous les dictionnaires en un seul dictionnaire :

from functools import reduce
reduce(merge, [dict1, dict2, dict3...])
Copier après la connexion

Ceci L'opération ajoutera le contenu de tous les dictionnaires au premier dictionnaire de la liste.

Exemple :

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

# Output:
# {1:{'a':{'A'}}, 2:{'b':{'B'}, 'c':{'C'}}, 3:{'d':{'D'}}}
Copier après la connexion

Notez que le dictionnaire résultant est stocké dans dict1.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal