2016-03-26 11 views
1

私はTweepy/Django/nltkプロジェクトを行っています。ここでは、検索されたツイートを更新するリストがあります。ここで私は問題を抱えている部分です:ループ内にPythonリストが正しく追加されない

query = 'happy' 
max_tweets=5 
search_results = {} 
sentiments = {} 
sentilist = [] 
for status in tweepy.Cursor(api.search, q=query).items(max_tweets): 
    search_results[status.text] = unicode(status.text) 
    search_results[status.text] = search_results[status.text].replace('|', ' ') 
    search_results[status.text] = search_results[status.text].replace('\n', ' ') 
    print(senti.linearsvc10(status.text)) 
    sentiments['tweet'] = unicode(search_results[status.text]) 
    sentiments['sentiment'] = senti.linearsvc10(unicode(status.text)) 
    sentilist.append(sentiments) 
    print('inloop sentiments') 
    print sentiments 
    print('inloop sentilist') 
    print sentilist 

print('sentiments') 
print sentiments 
print('sentilist')  
print sentilist 

基本的に、感情がループの各実行のためにそう

{'tweet': 'Actual tweet here', 'sentiment': 'pos'} 

に等しくなりますが、私はそう、感情がリストに追加しますそれの終わりまでに、私は5つの異なるオブジェクトをリストに入れます。しかし、実際に何が起こるかは、それぞれがセンチリストに追加されるときに、リスト内の各アイテムを最後に追加されたオブジェクトに変更します。例は、次のように個々の感情のオブジェクトのようになります。

{'tweet': 'tweet1', 'sentiment': 'pos'} 
{'tweet': 'tweet2', 'sentiment': 'neg'} 
{'tweet': 'tweet3', 'sentiment': 'neg'} 
{'tweet': 'tweet4', 'sentiment': 'pos'} 
{'tweet': 'tweet5', 'sentiment': 'neg'} 

あるべきsentilistする追記:

ではなく、それは次のようになります。私のコードの

[{'tweet': 'tweet5', 'sentiment': 'neg'}, 
{'tweet': 'tweet5', 'sentiment': 'neg'}, 
{'tweet': 'tweet5', 'sentiment': 'neg'}, 
{'tweet': 'tweet5', 'sentiment': 'neg'}, 
{'tweet': 'tweet5', 'sentiment': 'neg'}] 

他の部分は、仕事と私はこれのための簡単な解決策があるように感じるが、私はまだそれを理解することはできません。

答えて

1

あなたは、各ループに新しい辞書sentimentsを行う必要があります。

for status in tweepy.Cursor(api.search, q=query).items(max_tweets): 
    sentiments = {} 

あなたは、何度も何度も同じ辞書内の値をオーバーライドし、各ループでこれと同じ辞書を追加します。したがってリストsentilistのすべてのエントリの最後の辞書更新の値が表示されます。

+0

これは、答えと説明のおかげで動作します! – user4215649

関連する問題