Mise à jour d'un dictionnaire imbriqué de profondeur variable
Pour mettre à jour de manière transparente un dictionnaire imbriqué (dictionnaire1) avec le contenu d'un autre dictionnaire imbriqué (mise à jour) tout en préservant des paires clé-valeur spécifiques, il est nécessaire d'employer une solution récursive qui prend en compte les différentes profondeurs des dictionnaires.
Considérez l'exemple de scénario suivant :
Avant la mise à jour :
dictionary1 = { "level1": { "level2": {"levelA": 0, "levelB": 1} } } update = { "level1": { "level2": {"levelB": 10} } }
L'utilisation de la méthode de mise à jour standard écraserait les valeurs "level2" existantes dans le dictionnaire1, ce qui donnerait :
dictionary1.update(update) print(dictionary1)
{ "level1": { "level2": {"levelB": 10} # "levelA" is lost } }
Solution récursive :
Pour répondre à cette exigence de préservation, le code Python suivant fournit une solution récursive :
import copy def update_dictionary(d, u): for k, v in u.items(): if isinstance(v, dict): # If the value is a dictionary, recursively update d[k] = update_dictionary(d.get(k, {}), v) else: # If the value is not a dictionary, simply update d[k] = copy.deepcopy(v) return d
Cette solution crée une copie complète du dictionnaire original1 pour empêcher les mises à jour sur place. Il parcourt ensuite le dictionnaire de mise à jour (u) et met à jour de manière récursive les valeurs correspondantes dans d. Si la valeur est un dictionnaire, elle continue la récursion ; sinon, il met à jour la valeur directement.
Utilisation :
Application de cette solution à l'exemple précédent :
result = update_dictionary(dictionary1, update) print(result)
Résultat :
{ "level1": { "level2": {"levelA": 0, "levelB": 10} # "levelA" preserved } }
Cette solution met à jour efficacement la valeur "levelB" tout en préservant la valeur "levelA" dans le dictionnaire d'origine. Il gère des dictionnaires imbriqués de différentes profondeurs, garantissant ainsi que des paires clé-valeur spécifiques sont préservées pendant le processus de mise à jour.
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!