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 ?
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!