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
Libérer: 2024-12-16 02:33:10
original
965 Les gens l'ont consulté

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

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

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

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

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!

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