J'ai une structure de données qui ressemble à ceci comme ceci: et une liste des touches décrivant un chemin d'accès à un élément de cette structure p> J'ai déjà une fonction y a-t-il un moyen de faire ce travail? Peut-être comme ceci: p> Cette question ressemble à Cette question , sauf que je veux écrire quelque chose à cet article et non seulement le lire. My Code: P> getsPath (chemin) code> (voir ci-dessous) censé renvoyer un pointeur sur l'objet sélectionné. Cela fonctionne bien pour la lecture, mais je rencontre des ennuis lorsque vous essayez d'écrire p>
Mes données réelles peuvent être visibles ici (j'ai utilisé Json.loads () pour analyser le Les données). Notez que je prévois d'ajouter des trucs à cette structure. Je veux une approche générale de la preuve future du projet. P> def getPath(path):
nowSelection = jsonData
for i in path:
nowSelection = nowSelection[i]
return nowSelection
3 Réponses :
Vous pouvez mettre en cache votre getPath code> à l'aide de la fonction de cache personnalisée qui vous permet de remplir manuellement le cache sauvegardé. from functools import wraps
def cached(func):
func.cache = {}
@wraps(func)
def wrapper(*args):
try:
return func.cache[args]
except KeyError:
func.cache[args] = result = func(*args)
return result
return wrapper
@cached
def getPath(l):
...
getPath.cache[(someList, )] = 'green'
getPath(someList) # -> 'green'
Le résultat obtenu de Exemple: P> getsPath () code> est la valeur immuable em> à partir d'un dict ou d'une liste. Cette valeur ne sait même pas qu'elle est stockée dans une dicte ou une liste, et rien que vous puissiez faire pour le changer. Vous devez changer la dicte / la liste elle-même. getPath(["apple","colors",2]) = "green" # doesn't work
getPath(["apple","colors"])[2] = "green" # should work
Vous ne pouvez pas littéralement faire ce que vous essayez de faire. Je pense que le plus proche que vous puissiez obtenir est de passer la nouvelle valeur dans, puis de le réaffecter manuellement dans la fonction: je l'ai renommé sur SetPath code> pour refléter son objectif mieux. p> p>