[英]How to loop through a list of dictionary and select specific key value python
[英]How to loop through dictionary list and extract one key with boolean value
我正在处理使用Streaming API收集的Twitter数据,并试图删除所有转发的推文。 我的数据集中的单个项目如下所示:
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))
但这给了我这样的错误:
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'
我还使用“ tryexcept”来避免由于不完整的tweet引起的任何错误,但它返回的长度为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
解决此问题的最简单方法是执行以下操作:
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
使用具有内置错误检查功能的字典功能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))
如果您要列出未转发的推文列表,则实际上要在“ reweeted”为False的情况下附加所有推文:
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))
Tweets的消费者应该容忍新字段的增加和字段顺序的变化。 并非所有字段都出现在所有上下文中。 通常将空字段,空集和不存在字段视为同一件事是安全的。 参考
所以你可以改变
if tweet['retweeted'] == True:
tweets_Rt_removed.append(tweet)
至
if tweet.get('retweeted', False) is True:
tweets_Rt_removed.append(tweet)
在这种情况下,如果有一些推文没有转发,那么您将跳过它们。
如果您想收集所有未在单个列表中转发的推文:
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'
推文(字典)也将被算作尚未转发的推文。 因此,只有明确包含'retweeted': True
推文才会被转发。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.