Maison >développement back-end >Tutoriel Python >Comment puis-je accéder et modifier efficacement les données dans les dictionnaires Python imbriqués à l'aide d'une liste de clés ?

Comment puis-je accéder et modifier efficacement les données dans les dictionnaires Python imbriqués à l'aide d'une liste de clés ?

DDD
DDDoriginal
2024-12-23 08:38:16839parcourir

How Can I Efficiently Access and Modify Data in Nested Python Dictionaries Using a List of Keys?

Naviguer dans des dictionnaires imbriqués avec une liste de clés

Problème :

Comment pouvons-nous accéder et manipuler efficacement les données au sein d'un structure de dictionnaire profondément imbriquée utilisant une liste de clés ?

Solution :

La fonction Python native functools.reduce peut être utilisée pour parcourir le dictionnaire efficacement en un seul pass.

Implémentation :

from functools import reduce
import operator

def get_by_path(root, items):
    """Access a nested object in root by item sequence."""
    return reduce(operator.getitem, items, root)

Utilisation :

Pour récupérer la valeur au chemin spécifié, utilisez get_by_path :

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

maplist = ["a", "r"]
value = get_by_path(dataDict, maplist)  # 1

Réglage Valeurs :

Pour définir une valeur sur un chemin particulier, nous pouvons réutiliser get_by_path pour localiser le dictionnaire parent et attribuer la valeur à la clé souhaitée :

def set_by_path(root, items, value):
    """Set a value in a nested object in root by item sequence."""
    get_by_path(root, items[:-1])[items[-1]] = value

Utilisation :

maplist = ["b", "v", "w"]
set_by_path(dataDict, maplist, 4)

Supplémentaire Fonctionnalité :

Par souci d'exhaustivité, nous pouvons également définir une fonction pour supprimer une paire clé-valeur au sein du dictionnaire imbriqué :

def del_by_path(root, items):
    """Delete a key-value in a nested object in root by item sequence."""
    del get_by_path(root, items[:-1])[items[-1]]

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