-1
votes

Python Obtenez le pointeur à un article dans une combinaison de dictionnaire / liste imbriquée en fonction d'une liste de clés

J'ai une structure de données qui ressemble à ceci comme ceci: xxx pré>

et une liste des touches décrivant un chemin d'accès à un élément de cette structure p> xxx Pré>

J'ai déjà une fonction 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> xxx pré>

y a-t-il un moyen de faire ce travail? Peut-être comme ceci: p> xxx pré>

Cette question ressemble à Cette question , sauf que je veux écrire quelque chose à cet article et non seulement le lire.
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>

My Code: P>

def getPath(path):
    nowSelection = jsonData
    for i in path:
        nowSelection = nowSelection[i]
    return nowSelection


0 commentaires

3 Réponses :


0
votes

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'


0 commentaires

1
votes

Le résultat obtenu de 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.

Exemple: P>

getPath(["apple","colors",2]) = "green"  # doesn't work
getPath(["apple","colors"])[2] = "green" # should work


0 commentaires

0
votes

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: xxx

je l'ai renommé sur SetPath pour refléter son objectif mieux.


0 commentaires