按文本长度拆分推特数据集的函数报错求助(TypeError)
解决推特数据过滤的TypeError问题
嘿,我来帮你搞定这个TypeError问题!先看看你的代码里哪里出了问题:
错误原因分析
- 索引使用错误:你输入的
k1_tweets应该是一个包含多条推特数据的列表,而列表只能用数字索引(比如tweets[0]),但你写了tweet['text']——这是字典的访问方式,直接在列表上用字符串键肯定会触发list indices must be integers or slices, not str的错误。 - 逻辑混乱:你的推导式
{i for i in tweet if tweet['text'][i] > 50}完全搞错了逻辑:你遍历的是tweet(列表)的索引i,然后试图用tweet['text'][i]去访问,这既混淆了列表和字典的访问方式,也没正确计算文本长度(应该用len()函数)。 - 没有保留过滤结果:就算推导式写对了,你也没把它赋值给变量,最后直接返回原
tweet,等于完全没做过滤操作。
修正后的代码
假设你的推特数据是字典组成的列表(比如每条推特是{'text': '推文内容', ...}这样的结构),修正后的函数应该是这样:
def filter_short_tweets(tweets): # 过滤出文本长度超过50字符的推文,返回新列表 return [tweet for tweet in tweets if len(tweet['text']) > 50] # 调用示例,生成过滤后的三组新数据集 filtered_k1 = filter_short_tweets(k1_tweets) filtered_k2 = filter_short_tweets(k2_tweets) filtered_k3 = filter_short_tweets(k3_tweets)
代码说明
- 函数参数改名为
tweets(复数形式,更符合“一组数据”的语义) - 使用列表推导式遍历每条推特数据,对每条推特:
- 用
tweet['text']获取推文文本(这是字典的正确访问方式,前提是每条推特是包含text键的字典) - 用
len()函数计算文本长度,判断是否大于50
- 用
- 返回的是过滤后的新列表,不会修改原输入数据,完美符合你“生成三组新数据集”的需求
如果你的推特数据结构不是字典列表(比如是其他格式),可以补充说明具体结构,我再帮你调整!
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

