如何在字典列表中循环并提取一个带有布尔值的键

2024-06-01 02:32:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用流式API收集twitter数据,并试图删除所有转发的推文。 数据集中的单个项如下所示:

tweets_data[5]

{'contributors': None,
 'coordinates': None,
 'created_at': 'Thu Mar 09 15:14:10 +0000 2017',
... ...
 'retweet_count': 0,
 'retweeted': False,
... ...}

我写了一个循环来完成这项工作:

^{pr2}$

但它给了我这样一个错误:

KeyError                                  Traceback (most recent call last)
<ipython-input-32-d44896eca6fd> in <module>()
      4 
      5 for tweet in tweets_data:
----> 6     if tweet['retweeted'] == True:
      7         tweets_Rt_removed.append(tweet)
      8 

KeyError: 'retweeted'

我还使用“try except”来避免不完整的tweet引起的任何错误,但是它返回长度0。在

这是布尔值引起的错误吗? 感谢任何帮助!在


Tags: 数据innoneapidata错误流式twitter
3条回答

使用dictionary函数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列表,那么您实际上需要附加“retweeted”为False的所有tweets:

^{pr2}$

包装

if tweet['retweeted'] == True:
        tweets_Rt_removed.append(tweet)

有:

^{pr2}$

排除故障的最简单方法是:

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

这将向您显示特定tweet的内容,并且您可以查看您的密钥是否在那里。在

如果它不存在,那么您只需要先检查它是否存在:

^{pr2}$

相关问题 更多 >