J'ai besoin d'aide pour créer une fonction qui passe par un dictionnaire donné. La valeur associée à cette clé peut être une autre clé du dictionnaire. J'ai besoin de la fonction pour continuer à rechercher les touches jusqu'à ce qu'il atteigne une clé qui n'a pas de valeur associée.
doe hen spider lion
3 Réponses :
Considérant l'existence de boucles infinies, cela doit être manipulé. Votre description n'est pas claire sur ce qui devrait arriver dans ce cas.
def follow_me(d, key): visited_keys = [] while key not in visited_keys and d[key]: visited_keys.append(key) key = d[key] if not d[key]: return key return "this hunt has no end"
Quelques commentaires: Vous n'avez presque jamais besoin d'utiliser dic.keys code>, vous pouvez simplement utiliser le dictionnaire directement pour obtenir le même effet (cela est vrai des tests d'adhésion et de l'itération). Vous n'avez pas non plus besoin de récursivité ici. La récursion quotidienne peut toujours être transformée par un programmeur en boucle et la boucle est beaucoup plus efficace en Python (qui ne fait pas d'optimisation des appels de queue).
i pense em> C'est ce que vous recherchez, bien que votre description problématique soit très obscur: Notez que la boucle de cette fonction fonctionnera pour toujours si Il y a un cycle entre les clés et les valeurs de votre dictionnaire. Votre exemple en a un entre Si vous demandez une clé qui n'est pas dans le dictionnaire (comme 'lion' code> et
'zebra' code>, et ce n'est pas tout à fait clair comment vous avez l'intention de briser un tel cycle. Si vous souhaitez développer chaque clé une seule fois, vous pouvez le supporter en gardant une trace des valeurs que vous avez vues jusqu'à présent dans un
définir code>: p>
suivi_me (d, 'zèbre') code> avec votre exemple dictionnaire retournera
'zèbre' code> après avoir été allant
zèbre => lion => zèbre code>). Si vous voulez d'autres résultats, vous auriez besoin d'une logique différente et cela pourrait être difficile à faire. P>
'Aardvark' code> Dans votre exemple), la clé demandée sera immédiatement renvoyée. Vous pouvez ajouter une manipulation spéciale pour la première clé que vous recherchez, mais cela rendrait à nouveau des choses plus compliquées. P> p>
Merci beaucoup! C'est exactement ce que c'est censé être répondu! J'ai été coincé dessus depuis des siècles merci beaucoup!
s'étendre sur les autres réponses, qui sont toujours valables. Si vous avez un Très em> Grand Dictionnaire, utilisez la touche donne la sortie: p> pas dans dic.Keys () code> ou
k in d code> iterate via toutes les clés à chaque boucle. < P> Pour faire le tour de cela, on peut utiliser un essai attrayez: p>
C'est garanti de ne pas arriver dans ce cas
@Moormanly: C'est dans son exemple avec
'lion' code> et
'zèbre' code>. Je ne suis pas sûr de ce qu'ils attendent de cela.
oh avec lion et zèbre, ils veulent qu'il soit imprimé faux mais je n'ai pas encore pris des exceptions parce que je ne peux pas comprendre comment itération à travers elle
Je suis sûr que vous n'obtenez pas
aardvark code> imprimé par votre code. La fonction que vous avez affichée fonctionnera pour toujours lorsque vous effectuez le dernier des appels de votre exemple.
Dans l'exemple de code que vous avez donné,
pendant D: code> est équivalent à
tandis que TRUE: code> si
d code> est un dictionnaire non vide et
FAUX: code> si
d code> est un dictionnaire vide. Aucun de ceux-ci n'est ce que vous voulez. Vous pouvez essayer
pendant que s en d: code> et mettre à jour
s code> à l'intérieur de la boucle.
S'il vous plaît ne faites pas plus de travail pour les autres en vandalisant vos messages. En publiant sur le réseau Stack Exchange (SE), vous avez accordé un droit non révocable, sous un CC Licence de BY-SA , pour la distribution du contenu (c'est-à-dire quels que soient vos choix futurs). En tant que politique SE, la version non vandalisée est distribuée. Ainsi, tout vandalisme sera retourné. S'il vous plaît voir: Comment la suppression de travail? ... . Si elle est autorisée à supprimer, il y a un bouton "Supprimer" sous le poteau, à gauche, mais ce n'est que dans les navigateurs, pas l'application mobile.