Comment mettre à jour un dictionnaire imbriqué tout en préservant des paires clé-valeur spécifiques ?

Linda Hamilton
Libérer: 2024-11-06 17:30:03
original
220 Les gens l'ont consulté

How to Update a Nested Dictionary While Preserving Specific Key-Value Pairs?

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}
    }
}
Copier après la connexion

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)
Copier après la connexion
{
    "level1": {
        "level2": {"levelB": 10}  # "levelA" is lost
    }
}
Copier après la connexion

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
Copier après la connexion

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)
Copier après la connexion

Résultat :

{
    "level1": {
        "level2": {"levelA": 0, "levelB": 10}  # "levelA" preserved
    }
}
Copier après la connexion

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!