0
votes

fonction qui lève les touches up dans un dictionnaire jusqu'à ce qu'il n'y ait plus de valeurs associées

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


6 commentaires

C'est garanti de ne pas arriver dans ce cas


@Moormanly: C'est dans son exemple avec 'lion' et 'zèbre' . 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 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: est équivalent à tandis que TRUE: si d est un dictionnaire non vide et FAUX: si d est un dictionnaire vide. Aucun de ceux-ci n'est ce que vous voulez. Vous pouvez essayer pendant que s en d: et mettre à jour s à 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.


3 Réponses :


0
votes

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"


1 commentaires

Quelques commentaires: Vous n'avez presque jamais besoin d'utiliser dic.keys , 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).



0
votes

i pense C'est ce que vous recherchez, bien que votre description problématique soit très obscur: xxx

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 'lion' et 'zebra' , 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 : xxx < P> Cela retournera la clé de la clé du cycle que vous atteindrez d'abord (donc suivi_me (d, 'zèbre') avec votre exemple dictionnaire retournera 'zèbre' après avoir été allant zèbre => lion => zèbre ). Si vous voulez d'autres résultats, vous auriez besoin d'une logique différente et cela pourrait être difficile à faire.

Si vous demandez une clé qui n'est pas dans le dictionnaire (comme 'Aardvark' 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.


1 commentaires

Merci beaucoup! C'est exactement ce que c'est censé être répondu! J'ai été coincé dessus depuis des siècles merci beaucoup!



0
votes

s'étendre sur les autres réponses, qui sont toujours valables. Si vous avez un Très Grand Dictionnaire, utilisez la touche pas dans dic.Keys () ou k in d iterate via toutes les clés à chaque boucle. < P> Pour faire le tour de cela, on peut utiliser un essai attrayez: xxx

donne la sortie: xxx


0 commentaires