Maison >développement back-end >Tutoriel Python >Comment puis-je accéder et modifier efficacement les éléments du dictionnaire imbriqués à l'aide d'une liste de clés en Python ?

Comment puis-je accéder et modifier efficacement les éléments du dictionnaire imbriqués à l'aide d'une liste de clés en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-16 02:33:10966parcourir

How Can I Efficiently Access and Modify Nested Dictionary Items Using a Key List in Python?

Accès aux éléments de dictionnaire imbriqués via une liste de clés : exploration d'une structure imbriquée

Les structures de données complexes telles que les dictionnaires nécessitent souvent des méthodes efficaces pour parcourir et manipuler leur contenu imbriqué. Un défi courant consiste à accéder à des éléments spécifiques au sein d'une structure imbriquée en fonction d'une liste de clés fournie.

Approche existante

Une méthode pour résoudre ce problème consiste à naviguer de manière itérative dans le dictionnaire, en utilisant chaque touche de la liste pour localiser l’élément souhaité. Cette approche, cependant, peut devenir de plus en plus verbeuse et sujette aux erreurs pour les structures profondément imbriquées.

Solution améliorée utilisant Réduire

Une solution plus élégante et plus efficace implique de tirer parti de la réduction de Python () fonction. réduire() applique de manière itérative une opération spécifiée à une séquence d’éléments, réduisant la séquence à une valeur unique. En utilisant Operator.getitem comme opération, nous pouvons parcourir le dictionnaire, en utilisant chaque clé de la liste pour récupérer la valeur associée.

from functools import reduce  # forward compatibility for Python 3
import operator

def get_from_dict(dataDict, mapList):
    return reduce(operator.getitem, mapList, dataDict)

Définition d'une valeur

Le même principe peut être appliqué pour modifier des valeurs au sein du dictionnaire. En utilisant get_from_dict pour localiser le dictionnaire parent et la clé finale, nous pouvons attribuer directement la nouvelle valeur.

def set_in_dict(dataDict, mapList, value):
    get_from_dict(dataDict, mapList[:-1])[mapList[-1]] = value

Fonctions supplémentaires

Développement de la fonctionnalité principale, nous pouvons créer des fonctions supplémentaires pour supprimer et manipuler les structures imbriquées. Par exemple, une fonction pour supprimer une clé :

def del_by_path(root, items):
    del get_from_path(root, items[:-1])[items[-1]]

Exemple complet

Voici une démonstration complète du code :

dataDict = {
    "a": {
        "r": 1,
        "s": 2,
        "t": 3
    },
    "b": {
        "u": 1,
        "v": {
            "x": 1,
            "y": 2,
            "z": 3
        },
        "w": 3
    }
}

maplist = ["a", "r"]
print(get_from_dict(dataDict, maplist))  # Output: 1

maplist = ["b", "v", "y"]
print(get_from_dict(dataDict, maplist))  # Output: 2

set_in_dict(dataDict, ["b", "v", "w"], 4)

print(dataDict)  # Output: {'a': {'r': 1, 's': 2, 't': 3}, 'b': {'u': 1, 'v': {'w': 4, 'x': 1, 'y': 2, 'z': 3}, 'w': 3}}

Cette approche améliorée offre une méthode concise et efficace pour parcourir et modifier des structures de dictionnaires imbriquées complexes à l'aide d'une liste de clés, offrant flexibilité et lisibilité du code.

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