Travailler avec unicode clés dans un dictionnaire python
Je suis en train d'apprendre à propos de l'API Twitter à l'aide de Python 2.7.x. J'ai sauvé un nombre aléatoire de tweets et je suis en train de traiter. Chaque tweet est converti à un dictionnaire json.les charges et tous les dictionnaires font partie d'une liste.
Un seul tweet, je veux être en mesure d'extraire certains champs du dictionnaire. Les touches sont toutes des chaînes unicode. Si je itérer sur les touches dans une boucle, je n'ai pas de problèmes d'impression les valeurs:
for i in tweet.keys():
print i, tweet[i]
De sorte que la boucle ci-dessus fonctionne très bien, mais je n'ai pas eu la chance de trouver comment spécifier manuellement la clé. "u texte'" est la clé pour le tweet de contenu (de l'utilisateur réel de la poste). Si j'essaie d'imprimer tweet['texte'], je reçois un KeyError. J'ai naïvement essayé tweet[u texte'] mais qui échoue avec une KeyError trop.
Je suppose que je suis curieux de connaître la différence entre ce que la boucle est en train de faire comme il suit à travers un tweet.les touches() par rapport à ce que je fais quand manuellement je la spécification d'une clé. Notez que si j'imprime la valeur de i dans la boucle ci-dessus, le nom de la clé est imprimé, mais sans unicode emballage. Lorsque la clé est "u texte'", la valeur de i est juste un "texte", ou, au moins, c'est ce qui est imprimé sur le terminal.
Depuis
'text' == u'text'
(python implicitement encode / décode comme nécessaire ici), cela signifie simplement vous n'avez pas de clé dans votre dictionnaire.La différence doit être alors que vous êtes à la recherche à un autre dictionnaire. Celui qui n' pas ont un
'text'
clé.Remarque pour d'autres lecteurs, ce qui est différent en python3, où la comparaison
b'text' != 'text'
n'est même pas autorisémais pas de chaîne unicode ne sera jamais affichée avec l'
u
préfixe.OriginalL'auteur drumboots | 2014-07-02
Vous devez vous connecter pour publier un commentaire.
Python 2 poignées de traduction entre
str
etunicode
clés de façon transparente pour vous, à condition que le texte peut être codé en ASCII:Cela signifie que si vous obtenez un
KeyError
pourtweet['text']
, puis que le dictionnaire n'a pas de clés tels.OriginalL'auteur Martijn Pieters
Alors que ce lien peut répondre à la question, il est préférable d'inclure les parties essentielles de la réponse et de fournir le lien de référence. Lien-ne répond peut devenir non valide si la page liée changements. - Revue
OriginalL'auteur Andrew Tikhonov