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!