2017-11-26 13 views
0

私はPythonを初めて使っていますが、私は達成しようとしていることを知っています。基本的には、PythonにロードされたJSONファイルのtwitterからtweetの出力があります。私がする必要があるのは、テキスト・キーにアクセスするつぶやきを繰り返すことです。これは、各ツイートのテキストがあります。トピック・モデリングを行うために使用するためです。だから、私は "テキスト"がこのデータ構造で3重にネストされていることを発見しました。そして、データセットを反復してすべてのツイートから "テキスト"を引き出すために、forループコードを書く正しい方法を見つけることは本当に難しいです。ここでネストされたforループを使用してPythonのつぶやきのJSONファイルを反復処理する

は、JSONの構造がどのようなものであるかを見ている:https://pastebin.com/fUH5MTMx

だから、私は私が望む「テキスト」キーが[ヒット] [ヒット] [_ソース]の範囲内であることを考え出しました。私が理解できないことは、_sourceを通して反復してそれらのテキストを引き出すための適切なループです。しかし、私は最初の構文エラーのいずれかを取得しておく

for item in tweets['hits']["hits"]["_source"]: 
     print(item['text']) 

for hits in tweets["hits"]["hits"]: 
     for _source in hits: 
      for text in _source: 
       for item in text: 
        print(item) 

もこれを試してみました:ここに私のコードは、これまで(トライコードが外れている場合は、再度、私は非常に残念始めている)であります1つは、 "TypeError:リストインデックスは、2番目の文字列ではなく、整数またはスライスでなければならず、strではなくスライスでなければなりません"。私はこのリストにアクセスしようとしていることを何らかの方法で指定する必要があることを理解しており、そのリストを表示するために何かが足りなくて、繰り返しからの出力として整数を探していません...私は、任意の洞察力をいただければ幸いです

)スパイダーでのpython3を搭載したMacを使用して、このためにPythonでJSONモジュールを使用しています!この複数のネストは私をたくさん混乱させています。

答えて

1

['hits']["hits"]だから、これはあなたが実現した場合

for item in tweets['hits']["hits"]: 
    print(item["_source"]['text']) 
+0

が、これは助けをありがとう!私はそれを使って、その中のテキストだけで新しいリストを作ったので、テキストで作業することができます。 – Meleana

0

わからない動作するはず["_source"]
それは

tweets['hits']["hits"][0]["_source"] 

tweets['hits']["hits"][1]["_source"] 

tweets['hits']["hits"][2]["_source"] 

を意味["_source"]
を持っている一つまたは多くの項目でリストと辞書されていませんJSONはリストではなくPython辞書に変換されます。とにかく、この巣に入ってみましょう。

tweets['hits']はあなたに別のdictを与えます。

tweets['hits']['hits']あなたのリスト(括弧に注意してください)

これは明らかに辞書のリストである、とを提供します。この場合(それは常になりますかどうかわからない)、「_source」キーで辞書であなた探していることは最初のものですので、:

tweets['hits']['hits'][0]は、あなたが望むのdictを与えるだろう。そして、最後に:

tweets['hits']['hits'][0]['_source']はあなたにテキストを与える必要があります。

+1

これも助けてくれてありがとう、私は辞書とリストに混乱していたので、これは私がよりよく働いているものを理解するのに役立ちます。 – Meleana

0

2番目の「ヒット」の値はリストです。

試してみてください。

for hit in tweets["hits"]["hits"]: 
    print(hit["_source"]["text"]) 
関連する問題