Pourquoi un floating point clé de dictionnaire remplacer une clé entière avec la même valeur?

Je suis en train de travailler à travers http://www.mypythonquiz.com, et question n ° 45 demande pour la sortie de le code suivant:

confusion = {}
confusion[1] = 1
confusion['1'] = 2
confusion[1.0] = 4

sum = 0
for k in confusion:
    sum += confusion[k]

print sum

La sortie est 6, puisque la clé 1.0 remplace 1. C'est un peu dangereux pour moi, est-ce toujours utile pour le langage?

  • en utilisant le haut- sum comme une variable est aussi (légèrement) à confusion. Je méfiance code qui tente d'utiliser des flotteurs que les int clés, même si le langage le permet, même si je suis sûr qu'il y a certains cas où il pourrait être utile.
  • Cela ne ferait que vous faire du mal dans les situations où vous pourriez envisager 1.0 et 1 être différent. Compte tenu de l' (apparemment) la rareté de ces situations, il est compréhensible que le comportement par défaut est de les traiter comme des égaux.
  • Je serais méfiant de tout dictionnaire qui contient disjoints types de clés.
  • Bon point. 99% des fois j'ai juste utiliser des chaînes ou ints (ou de divers tuples construit à partir d'eux), de toute façon. Je n'ai pas vraiment confiance en float clés.
  • Votre titre modifier a changé l'esprit de la question, mon intérêt est surtout de savoir si ce comportement est utile/comment il s'intègre avec le reste du langage Python, plutôt que de simplement 'pourquoi' ce comportement se produit. Encore, beaucoup de bonnes réponses ont surgi au sujet de la question d'origine.
  • Le titre et les questions sont deux choses différentes. La question du corps ne devrait pas dépendre sur le titre. Le titre devrait être une phrase anglaise en résumant les principaux points de la question (voir la section ici). Un titre comme "Tag2 en python Tag3 vs Tag4" n'est pas un bon titre, même si il peut sembler accrocheur. Si vous pensez que le titre actuel ne peut pas exprimer ce que vous vouliez à l'origine-à-dire le modifier, mais il devrait être une phrase. Plus important encore, si vous pensez que la question a obtenu un "mal tourner" dans ses réponses, vous devez préciser dans son corps avec une déclaration explicite.

InformationsquelleAutor sjdenny | 2015-08-25