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
Libérer: 2024-12-23 08:38:16
original
907 Les gens l'ont consulté

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

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

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

Utilisation :

maplist = ["b", "v", "w"]
set_by_path(dataDict, maplist, 4)
Copier après la connexion

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

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal