使用 python 的 reduce 方法将推文分组到他们的主题标签中,使用字符串(主题标签的名称)设置数组的错误键

use python's reduce method to group tweets into their hashtag, error setting key of array with string (name of hashtag)

我对 python 很陌生。我正在尝试将从 twitter api 返回的推文列表转换为分组列表(按主题标签)。我决定使用 reduce 方法,但我的问题是 python 不允许我将基于字符串的键创建为 属性: 这是数据示例

一条推文

{
 created_at: date
 id: number
 text: string
 entities: {
  hashtags: []
  urls: []
 }
}

接下来是代码,请注意,首先我做了一个过滤器以删除所有没有主题标签的推文,可能这就是将 'array' 设置为列表的原因。

tweets_copy = []
for tweet in tweets:
    tweets_copy.append(tweet._json)

tweetsWithHashtags = filter(lambda tweet: len(tweet['entities']['hashtags']) > 0, tweets_copy)

def groupPostByHashtag(r, a):
    firstHashtag = a['entities']['hashtags'][0]['text']
    r[firstHashtag] = r[firstHashtag] or []   #KeyError: '5200mAh'  this is the hashtag name
    r[firstHashtag].append(a)
    return r

results = reduce(groupPostByHashtag, tweetsWithHashtags, {})
print(results)

代替r[firstHashtag] or [],做r.get(firstHashtag, [])
KeyError 当使用方括号语法在字典中访问不存在的键时引发。
通过使用 get 方法,您可以通过提供默认值来防止错误。

顺便说一句,您还可以使用 defaultdict 创建所需的字典:

from collections import defaultdict

result = defaultdict(list)
for tweet in tweetsWithHashtags:
    hashtags = tweet['entities']['hashtags']
    for ht in hashtags:
        result[ht].append(tweet)