簡體   English   中英

改善Twitter查詢中的列表理解

[英]Improving list comprehension on twitter query

我正在使用twitter api,並且具有以下python代碼設置:

call_twitter = urllib2.urlopen("http://search.twitter.com/search.json?q=hello")
tweets_json = json.loads(call_twitter.read())

api json輸出的結構是

/completed_in
/stuff
/stuff
/results
.../tweet1
....../from_user
....../tweet_text
....../etc
.../tweet2
.../moretweets

我正在嘗試最小的列表理解以獲取內部詞典中的tweets“ from_user”和“ text”屬性。 我能做的最好的是

call_twitter = urllib2.urlopen("http://search.twitter.com/search.jsonq=alhamdulillah")
tweets_json = json.loads(call_twitter.read())

    for tweet in tweets_json['results']:
        text = tweet['text']
        from_user = tweet['from_user']

我將其改進為

text_list = [tweet['text'] for tweet in tweets_json['results']]
from_user_list = [tweet['from_user'] for tweet in tweets_json['results']]

當我將它們分別保存在2個不同的列表中時,我不確定“ from_user”和“ text”是否始終彼此對應(按順序)。 有沒有一種方法可以在不使用for循環的情況下一次獲取“ text”和“ from_user”?

我是python noob,但感謝您的預先幫助:)

你可以做

text_list = [(tweet['text'], tweet['from_user']) for tweet in tweets_json['results']]

這將為您提供一個元組列表,每個元組為(text, user)

嘗試這個:

tweets = [(t['text'], t['from_user']) for t in tweets_json['results']]

這將為您提供以下形式的元組列表(tweet, user)

就可讀性而言,保留原始 for循環可能會更好。

tweets = [(tweet['text'], tweet['from_user']) for tweet in tweets_json['results']]

正如Gordon Bailey所建議的那樣,這是一種在元組(text, user)獲取所需信息的好方法。

就速度而言:列表理解可能會更好。

通常,如果您要構建復合值,則可以使用列表理解。 如果您將循環用於副作用(例如打印),則顯式循環會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM