2016-03-26 5 views
1

Ich mache ein Tweepy/Django/Nltk-Projekt, wo ich eine Liste, die für die gesuchten Tweets aktualisieren wird. Hier ist der Teil, wo ich ein Problem habe:Python-Liste nicht korrekt in einer Schleife anfügen

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 

im Grunde, Gefühle werden gleich zu

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

So für jeden Durchlauf der Schleife, möchte ich die Gefühle in die Liste anzuhängen, so Am Ende werde ich 5 verschiedene Objekte in der Liste haben. Aber was tatsächlich passiert, ist für jeden Anhang an sentilist, es ändert jedes Element in der Liste zu dem letzten Objekt, das angehängt wurde. Beispiel würden die folgenden einzelnen Empfindungen Objekte sein:

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

wenn sollte sentilist Anhängen sein:

sondern wird es:

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

Andere Teile meines Codes arbeiten und Ich habe das Gefühl, dass es eine einfache Lösung dafür gibt, aber ich kann es immer noch nicht herausfinden.

Antwort

1

Sie benötigen ein neues Wörterbuch sentiments in jeder Schleife zu machen:

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

Sie die Werte im gleichen Wörterbuch außer Kraft setzen immer wieder und das gleiche Wörterbuch in jeder Schleife anhängen. Daher sehen Sie die Werte für Ihre letzte Wörterbuchaktualisierung in allen Einträgen in der Liste sentilist.

+0

Das funktioniert, danke für die Antwort und Erklärung! – user4215649

Verwandte Themen