Fusionner en profondeur des dictionnaires multi-niveaux
En Python, fusionner des dictionnaires de manière récursive tout en conservant une profondeur d'imbrication inconnue peut être un défi. Voici une solution qui résout ce problème :
def deep_merge(a: dict, b: dict, path=[]): for key in b: if key in a: if isinstance(a[key], dict) and isinstance(b[key], dict): deep_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
Cette fonction prend deux dictionnaires en entrée et fusionne récursivement leur contenu. Il maintient un chemin pour suivre le niveau d'imbrication actuel afin de fournir des messages d'erreur plus précis en cas de conflits.
Exemple :
dict1 = {1:{'a':{'A'}}, 2:{'b':{'B'}}} dict2 = {2:{'c':{'C'}}, 3:{'d':{'D'}}} result = deep_merge(dict1, dict2) print(result) # {1:{'a':{'A'}}, 2:{'b':{'B'}, 'c':{'C'}}, 3:{'d':{'D'}}}
Notez que deep_merge mute le premier argument, c'est pourquoi result contient le dictionnaire fusionné.
Pour fusionner plusieurs dictionnaires sans en modifier aucun, transmettez-les comme mot-clé arguments :
from functools import reduce result = reduce(deep_merge, [dict1, dict2, ...], {})
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!