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

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

DDD
DDDoriginal
2024-12-27 02:53:08458parcourir

How Can I Efficiently Access and Update Nested Dictionary Items in Python Using a List of Keys?

Accès aux éléments de dictionnaire imbriqués à l'aide d'une liste de clés

L'accès aux structures de dictionnaire imbriquées peut être une tâche courante dans la programmation Python. Ici, nous explorons une approche plus efficace que le code fourni pour récupérer et modifier des données dans un dictionnaire complexe à l'aide d'une liste de clés.

Utilisation de réduire() pour une traversée améliorée

La fonction réduire() est un outil puissant pour transformer une séquence de valeurs en appliquant une seule opération. Dans ce cas, nous pouvons l'utiliser pour parcourir la structure du dictionnaire, réduisant ainsi la liste des clés en une seule valeur. La méthode Operator.getitem est utilisée comme opération pour récupérer le niveau de dictionnaire suivant à chaque itération.

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

def get_from_dict(data_dict, map_list):
    return reduce(operator.getitem, map_list, data_dict)

Mise à jour des données avec réduire() et Operator.setitem

Pour mettre à jour les valeurs du dictionnaire imbriqué, nous pouvons réutiliser get_from_dict pour récupérer le dictionnaire parent et utiliser la méthode Operator.setitem pour définir le value.

def set_in_dict(data_dict, map_list, value):
    get_from_dict(data_dict, map_list[:-1])[map_list[-1]] = value

Exemple d'utilisation

Testons notre code :

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

map_list = ["a", "r"]
print(get_from_dict(data_dict, map_list))  # Output: 1

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

map_list = ["b", "v", "w"]
set_in_dict(data_dict, map_list, 4)
print(data_dict)  # Updated dictionary with "w": 4

Cette approche améliorée exploite de puissantes fonctions Python telles que réduire() et Operator.getitem pour effectuer efficacement des opérations de dictionnaire imbriquées, rendant votre code plus propre et plus efficace.

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