web-dev-qa-db-ja.com

python辞書でのUnicodeキーの使用

私はPython 2.7.xを使用してTwitter APIについて学んでいます。ランダムなツイートをいくつか保存し、それらを処理しようとしています。各ツイートはjson.loadsで辞書に変換されます。すべての辞書はリストの一部です。

1つのツイートがあれば、辞書から特定のフィールドを抽出できるようにしたいと思います。キーはすべてユニコード文字列です。ループ内でキーを反復処理する場合、値を出力するのに問題はありません。

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

したがって、上記のループは正常に機能しますが、キーを手動で指定する方法を見つけることができませんでした。 「u'text '」は、実際のツイートコンテンツ(ユーザーの実際の投稿)のキーです。 Tweet ['text']を印刷しようとすると、KeyErrorが発生します。単純にTweet [u'text ']を試しましたが、KeyErrorで失敗します。

Tweet.keys()をループするときのループの処理と、手動でキーを指定するときの処理の違いに興味があるのではないでしょうか。上記のループでiの値を出力すると、キー名は出力されますが、Unicodeラッピングは実行されません。キーが「u'text '」の場合、iの値は単なる「text」、または少なくとも端末に出力されるものです。

16
drumboots

Python 2は、strキーとunicodeキー間の変換を透過的に処理します(テキストを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'

これは、Tweet['text']に対してKeyErrorを取得した場合、その辞書にはそのようなキーがないを意味します。

22
Martijn Pieters