【问题标题】:Python list not appending correctly in a loopPython列表未在循环中正确附加
【发布时间】:2016-07-14 04:41:22
【问题描述】:

我正在做一个 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'}]

我的代码的其他部分有效,我觉得有一个简单的解决方案,但我仍然无法弄清楚。

【问题讨论】:

    标签: python django list dictionary tweepy


    【解决方案1】:

    您需要在每个循环中创建一个新字典sentiments

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

    您一次又一次地覆盖同一个字典中的值,并在每个循环中附加同一个字典。因此,您会在列表 sentilist 的所有条目中看到上次字典更新的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2013-08-21
      • 2020-03-09
      • 2019-08-22
      • 2020-03-26
      相关资源
      最近更新 更多