排序Tweepy状态对象?

时间:2015-07-09 15:04:14

标签: python sorting twitter tweepy

我使用Tweepy获取热门话题列表。它基本上是转发次数最多的当前推文列表。当API对象返回我的推文列表时,我会得到Status个对象的列表。

我需要根据转推的数量对这些Status对象进行排序。该属性为retweet_count。我不知道如何正确地做到这一点,因为内置排序方法不起作用,因为这是一个嵌套对象

这是我到目前为止所做的:

def getTrendingTopics(self):

'''
Get popular tweets by getting current tweets.
Sort the tweets according to the number of retweets, from high to low. 
Return the 15 most popular tweets in a list.        
'''

      trendingTopicsList = {}
      publicTweets = self.api.home_timeline()

      for tweet in publicTweets:
           retweetCount = str(len(tweet.retweets()))
           ##Sort Tweets here?
           print(tweet.text + "\n Retweets: " + retweetCount + "\n")

        #return the tweets in a list

返回推文很容易,但我如何对它们进行排序?

我尝试了几种方法,但都没有效果。我把那个代码留了出来。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

只需使用python sorted将其应用于tweet对象即可。请参阅下面的代码与玩具示例。

In [1]: 
class Tweet:
    def __init__(self, text, retweets):
        self.text = text
        self.rt = retweets

    def retweets(self):
        return self.rt

In [2]:    
t1 = Tweet("text1", 2)
t2 = Tweet("text2", 17)
t3 = Tweet("text3", 3)
l = [t1, t2, t3]
[t.text for t in l]

Out[2]:
['text1', 'text2', 'text3']

In [3]:    
from operator import methodcaller
lsorted = sorted(l, key=methodcaller('retweets'), reverse=True)
[t.text for t in lsorted]

Out[3]:
['text2', 'text3', 'text1']