Disons que j'ai un dictionnaire de la forme:
d={'geo': {'bgcolor': 'white','lakecolor': 'white','caxis': {'gridcolor': 'white', 'linecolor': 'white',}},
'title': {'x': 0.05},
'yaxis': {'automargin': True,'linecolor': 'white','ticks': '','zerolinecolor': 'white','zerolinewidth': 2}
}
Comment pouvez - vous travailler votre chemin à travers cette dict et faire une liste de chaque chemin clé complet qui contient la valeur 'white'
? En utilisant une fonction définie par l' utilisateur JFS dans le poste de recherche d'une valeur dans un python dictionnaire imbriqué vous permet de vérifier si oui ou non 'white'
se produit au moins une fois et retourne aussi le chemin:
# in:
def getpath(nested_dict, value, prepath=()):
for k, v in nested_dict.items():
path = prepath + (k,)
if v == value: # found value
return path
elif hasattr(v, 'items'): # v is a dict
p = getpath(v, value, path) # recursive call
if p is not None:
return p
getpath(d,'white')
# out:
('geo', 'bgcolor')
Mais « blanc » se produit aussi d'autres endroits, comme dans:
1. d['geo']['lakecolor']
2: d['geo']['caxis']['gridcolor']
3: d['yaxis']['linecolor']
Comment puis-je faire en sorte que la fonction trouve tous les chemins?
J'ai essayé d' appliquer la fonction ci - dessus jusqu'à ce qu'il retourne none
tout en éliminant les chemins trouvés un par un, mais qui se transforma rapidement en un désordre laid.
Merci pour toutes les suggestions!