@ solution récursive de Håvard va probablement être OK ... à moins que le niveau d'imbrication est trop élevé, et vous obtenez un RuntimeError: maximum recursion depth exceeded
. Pour remédier à cela, vous pouvez utiliser la technique habituelle de suppression de récursivité: conservez votre propre pile d'éléments à examiner (sous forme de liste sous votre contrôle). À savoir:
def find_key_nonrecursive(adict, key):
stack = [adict]
while stack:
d = stack.pop()
if key in d:
return d[key]
for k, v in d.iteritems():
if isinstance(v, dict):
stack.append(v)
La logique ici est assez proche de la réponse récursive (sauf pour la vérification des dict
de la bonne façon ;-), à l'exception évidente que les appels récursifs sont remplacés par une boucle while
et .pop
et .append
opérations sur la liste de la pile explicite, stack
.
parcourir le dictionnaire et vérifier la clé – SilentGhost