2014-04-28 4 views
0

Édition:
Le code ci-joint contenait quelques bogues qui n'étaient pas liés à la question telle que intitulée. La réponse est assez simple, donc j'élimine le code non pertinent pour que la question, comme demandé dans le titre, et la réponse soient plus clairement intelligibles à ceux qui cherchent de telles choses. Merci à tous ceux qui ont pris le temps de lire le code et de me donner leurs impressions!Est-ce que "__name__ ==" peut servir de clé à un dict?

question originale, abrégée: me semble avoir du mal quand mon script Python tente d'accéder à l'entrée dict '"__main__":', qui est calée par '__name__ =='. Mon problème est-il lié à l'utilisation de ces chaînes en tant que variables, ou est-il plus probable que mon script échoue ailleurs? (SPOILER: Mon algorithme a eu tort.)

+1

Pour répondre à votre question réelle: oui, il est un objet hashable (chaîne), il peut donc être une clé. Votre 'erreur' est un 'KeyboardInterrupt' - quel est exactement le problème? – jonrsharpe

+0

Le problème est qu'il se bloque (apparemment indéfiniment) à chaque fois que le "2-gramme" \ "name__ ==" se produit. Je l'ai reproduit plusieurs fois. J'ai mis la probabilité par défaut pour chaque mot possible qui pourrait se produire à 1.0, donc je pense que l'algorithme devrait trouver un mot acceptable très rapidement. – eenblam

+0

Il me vient à l'esprit que je n'ai pas pris en compte les citations redondantes, comme nous le verrons dans '\ __ name__ ==" \ __ main __ "' Enquêter maintenant. – eenblam

Répondre

1

Les deux '__name__' et '==' peuvent servir de la clé du dictionnaire:

>>> d = {'__name__':1, '==':2} 
>>> d['__name__'] 
1 
>>> d['=='] 
2 
+0

Merci pour votre réponse! Je vous concède que vous avez, plus ou moins, répondu à la question. Cela fonctionne, tout comme "__name__ ==" (la chaîne en question). Malheureusement, vous m'avez aidé à voir que je devrais reformuler la question. S'il semble que cela demande vraiment un article séparé, je reviendrai et choisirai cette réponse comme meilleure. – eenblam

Questions connexes