Comment mettre à jour les dictionnaires imbriqués en Python sans écraser les clés intermédiaires ?

Patricia Arquette
Libérer: 2024-11-06 21:54:02
original
365 Les gens l'ont consulté

How to Update Nested Dictionaries in Python Without Overwriting Intermediate Keys?

Mise à jour des dictionnaires imbriqués sans écraser les clés intermédiaires

Lorsque vous travaillez avec des dictionnaires imbriqués, il est souvent nécessaire de mettre à jour des clés spécifiques sans affecter les autres niveaux. Cependant, la méthode de mise à jour standard en Python écrase toutes les clés au même niveau, ce qui rend difficile la réalisation de cet objectif.

Approche récursive

Une approche récursive peut résoudre efficacement ce problème. En parcourant les dictionnaires de manière récursive, nous pouvons identifier et mettre à jour les clés aux profondeurs appropriées tout en préservant la structure existante.

Par exemple, la fonction récursive suivante peut être utilisée pour mettre à jour le contenu de update dans le dictionnaire1 sans écraser le niveauA :

def update(d, u):
    for k, v in u.items():
        if isinstance(v, dict):
            d[k] = update(d.get(k, {}), v)
        else:
            d[k] = v
    return d
Copier après la connexion

Dans cette fonction, nous vérifions si v est un dictionnaire et appelons récursivement update avec les sous-dictionnaires appropriés. Si v n’est pas un dictionnaire, on met simplement à jour la clé correspondante dans d. Cela garantit que les clés intermédiaires ne sont pas écrasées.

Exemple d'utilisation

Considérez l'exemple suivant :

dictionary1 = {
    "level1": {
        "level2": {"levelA": 0, "levelB": 1}
    }
}
update = {
    "level1": {
        "level2": {"levelB": 10}
    }
}

updated_dictionary = update(dictionary1, update)
print(updated_dictionary)

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

Comme vous pouvez le voir, le niveauA est conservé dans le dictionnaire mis à jour, malgré la mise à jour contenant une valeur pour le niveauB. Cela démontre l'efficacité de l'approche récursive.

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