2016-03-26 1 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