Maison >développement back-end >Tutoriel Python >Comment mettre à jour les dictionnaires imbriqués en Python sans écraser les clés intermédiaires ?

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

Patricia Arquette
Patricia Arquetteoriginal
2024-11-06 21:54:02412parcourir

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

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}}}

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!

Déclaration:
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