我正在做一个Tweepy / Django / nltk项目,我有一个列表可以更新搜索到的推文。这是我遇到问题的部分:
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个不同的对象。但实际发生的是每个追加到sentilist的内容,它会将列表中的每个项目更改为附加的最后一个对象。例如,以下是个别情绪对象:
{'tweet': 'tweet1', 'sentiment': 'pos'}
{'tweet': 'tweet2', 'sentiment': 'neg'}
{'tweet': 'tweet3', 'sentiment': 'neg'}
{'tweet': 'tweet4', 'sentiment': 'pos'}
{'tweet': 'tweet5', 'sentiment': 'neg'}
当附加到sentilist时应该是:
[{'tweet': 'tweet1', 'sentiment': 'pos'},
{'tweet': 'tweet2', 'sentiment': 'neg'},
{'tweet': 'tweet3', 'sentiment': 'neg'},
{'tweet': 'tweet4', 'sentiment': 'pos'},
{'tweet': 'tweet5', 'sentiment': 'neg'}]
但它变成了:
[{'tweet': 'tweet5', 'sentiment': 'neg'},
{'tweet': 'tweet5', 'sentiment': 'neg'},
{'tweet': 'tweet5', 'sentiment': 'neg'},
{'tweet': 'tweet5', 'sentiment': 'neg'},
{'tweet': 'tweet5', 'sentiment': 'neg'}]
我的代码的其他部分工作,我觉得这是一个简单的解决方案,但我仍然无法弄清楚。
答案 0 :(得分:1)
您需要在每个循环中创建一个新词典sentiments
:
for status in tweepy.Cursor(api.search, q=query).items(max_tweets):
sentiments = {}
您反复覆盖同一字典中的值,并在每个循环中追加相同的字典。因此,您会在列表sentilist
中的所有条目中看到上次词典更新的值。