私は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」、または少なくとも端末に出力されるものです。
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
を取得した場合、その辞書にはそのようなキーがないを意味します。