我正在处理使用Streaming API收集的Twitter数据,并试图删除所有转发的推文。 我的数据集中的单个项目如下所示:
defer
我写了一个循环来完成这项工作:
tweets_data[5]
{'contributors': None,
'coordinates': None,
'created_at': 'Thu Mar 09 15:14:10 +0000 2017',
... ...
'retweet_count': 0,
'retweeted': False,
... ...}
但它给了我一个这样的错误:
tweets_Rt_Removed = []
for tweet in tweets_data:
if tweet['retweeted'] == True:
tweets_Rt_removed.append(tweet)
print(len(tweets_Rt_Removed))
我也使用“try except”来避免由不完整的推文引起的任何错误,但它返回的长度为0.
这是由布尔值引起的错误吗? 任何帮助表示赞赏!
答案 0 :(得分:0)
裹
if tweet['retweeted'] == True:
tweets_Rt_removed.append(tweet)
使用:
try:
if tweet['retweeted']: # Will throw a key error if it doesn't have a retweet
tweets_Rt_removed.append(tweet)
except KeyError:
pass # No retweeted == good
答案 1 :(得分:0)
解决此问题的最简单方法是执行此操作:
tweets_Rt_Removed = []
for tweet in tweets_data:
try:
if tweet['retweeted']: # no == True necessary
tweets_Rt_removed.append(tweet)
except:
import pdb;pdb.set_trace()
当你获得追溯时,它会转到pdb,然后你可以输入:tweet
这将显示特定推文的内容,您可以查看您的密钥是否存在。
如果它不存在,那么你只需先检查它是否存在:
if 'retweeted' in tweet:
do your stuff
答案 2 :(得分:0)
使用具有内置错误检查的字典函数get
,并允许您提供默认值,以防某些值的密钥不存在。
tweets_Rt_Removed = []
for tweet in tweets_data:
if tweet.get('retweeted', default=False):
tweets_Rt_removed.append(tweet)
print(len(tweets_Rt_Removed))
如果您正在尝试列出尚未转发的推文列表,您实际上想要将所有推文附加到"转发的"是假的:
tweets_Rt_Removed = []
for tweet in tweets_data:
if not tweet.get('retweeted', default=False):
tweets_Rt_removed.append(tweet)
print(len(tweets_Rt_Removed))
答案 3 :(得分:0)
推文的消费者应该容忍添加新字段和 方便排序的方差。并非所有字段都出现 上下文。考虑一个空的字段通常是安全的 设置,并且没有字段是同一件事。Reference
所以你可以改变
if tweet['retweeted'] == True:
tweets_Rt_removed.append(tweet)
到
if tweet.get('retweeted', False) is True:
tweets_Rt_removed.append(tweet)
在这种情况下,如果有一些没有转推字段的推文,您将跳过它们。
答案 4 :(得分:0)
如果您想收集所有未转发的推文:
not_retweeted = [t for t in tweets_data if not t.get('retweeted', False)]
或者只是那些被转发的人:
retweeted = [t for t in tweets_data if t.get('retweeted', False)]
这假设tweets_data
是包含字典作为项目的列表。
此外,错过密钥'retweeted'
的推文(词典)将被视为尚未转发的推文。因此,只有明确包含'retweeted': True
的推文才会被视为转发。