C'est l'un de ces subtiles différences entre les divers cartographie des collections qui peuvent vous mordre.
En Python (et apparemment en Lua) les clés d'une cartographie (dictionnaire ou une table, respectivement) sont des références d'objet. En Python, ils doivent être immuables types, ou ils doivent être des objets qui mettent en oeuvre un __hash__
méthode. (Le Lua docs suggèrent qu'il utilise automatiquement l'objet d'identification d'un algorithme de hachage/clé même pour les objets mutables et s'appuie sur la chaîne de stage pour s'assurer que l'équivalent chaînes à la carte pour les mêmes objets).
En Perl, Javascript, awk et de nombreuses autres langues, les touches pour le hachage, tableaux associatifs ou ce qu'ils sont appelés pour la langue donnée, sont des chaînes de caractères (ou "scalaires" en Perl). En perl $foo{1}, $foo{1.0}, and $foo{"1"}
sont toutes les références à la même cartographie en %foo
--- la clé est évalué comme un scalaire!
JSON qui a commencé comme un Javascript de sérialisation de la technologie. (JSON est synonyme de [J]ava[S]cript [o]objet [n]introduction en bourse.) Naturellement, il implémente la sémantique pour sa cartographie de notation qui sont compatibles avec sa cartographie sémantique.
Si les deux extrémités de votre sérialisation vont être Python alors vous feriez mieux d'utiliser les cornichons. Si vous avez vraiment besoin de convertir ces dos de JSON en natif des objets Python je suppose que vous avez un couple de choix. D'abord, vous pourriez essayer (try: ... except: ...
) pour la convertir en une touche à un numéro dans le cas d'un dictionnaire de recherche de panne. Alternativement, si vous ajoutez un code à l'autre extrémité (le sérialiseur ou générateur de cette de données JSON) puis vous pouvez faire effectuer une sérialisation JSON sur chacune des valeurs de la clé --- fournir ceux-ci comme une liste de clés. (Puis votre code Python serait d'abord parcourir la liste des clés, de l'instanciation/désérialisation en natif des objets Python ... et ensuite utiliser ces pour accéder aux valeurs de la cartographie).