web-dev-qa-db-fra.com

Travailler avec des clés Unicode dans un dictionnaire python

J'apprends l'API Twitter en utilisant Python 2.7.x. J'ai enregistré un certain nombre de tweets aléatoires et j'essaie de les traiter. Chaque Tweet est converti en dictionnaire avec json.loads et tous les dictionnaires font partie d'une liste.

Étant donné un seul Tweet, je veux pouvoir extraire certains champs du dictionnaire. Les clés sont toutes des chaînes unicode. Si je parcours les touches en boucle, je n'ai aucun problème à imprimer les valeurs:

for i in Tweet.keys():
    print i, Tweet[i]

Donc, la boucle ci-dessus fonctionne bien, mais je n'ai pas eu de chance de savoir comment spécifier manuellement la clé. "u'text" "est la clé du contenu réel du Tweet (le message réel de l'utilisateur). Si j'essaie d'imprimer Tweet ['texte'], j'obtiens une erreur KeyError. J'ai naïvement essayé Tweet [u'text '] mais cela échoue aussi avec une KeyError.

Je suppose que je suis curieux de savoir la différence entre ce que fait la boucle lorsqu'elle parcourt Tweet.keys () et ce que je fais lorsque je spécifie manuellement 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 l'habillage unicode. Lorsque la clé est "u'text" ", la valeur de i est simplement" text ", ou du moins c'est ce qui est imprimé sur le terminal.

16
drumboots

Python 2 gère la traduction entre les clés str et unicode de manière transparente pour vous, à condition que le texte puisse être encodé en ASCII:

>>> d = {u'text': u'Foo'}
>>> d.keys()
[u'text']
>>> 'text' in d
True
>>> u'text' in d
True
>>> d['text']
u'Foo'
>>> d[u'text']
u'Foo'

Cela signifie que si vous obtenez un KeyError pour Tweet['text'], puis ce dictionnaire n'a pas une telle clé.

22
Martijn Pieters