所以我是Python的新手,但我知道我想要完成的任务。基本上,我在Twitter中输入了一条加载到Python中的JSON文件中的推文。我需要做的是遍历推文以访问"文本"密钥,其中包含每条推文的文本,因为这是我将用于进行主题建模的内容。所以,我发现了" text"在这个数据结构中是三重嵌套的,并且很难找到编写for循环代码的正确方法,以便遍历数据集并拉出"文本"来自每条推文。
以下是JSON结构的样子:https://pastebin.com/fUH5MTMx
所以,我已经发现"文本"我想要的关键是[hits] [hits] [_ source]。我无法弄清楚的是适当的循环来迭代_source并拉出那些文本。到目前为止,这是我的代码(如果尝试代码的话,我再次开始抱歉):
for hits in tweets["hits"]["hits"]:
for _source in hits:
for text in _source:
for item in text:
print(item)
也尝试了这个:
for item in tweets['hits']["hits"]["_source"]:
print(item['text'])
但是我继续得到第一个语法错误然后" TypeError:list indices必须是整数或切片,而不是str"对于第二个。我理解我需要指定一些方法,我试图访问此列表,并且我错过了一些东西,以显示它的列表,我不是寻找整数作为迭代的输出.. 。(我在Python中使用JSON模块,在Spyder中使用带Python3的Mac)
非常感谢任何见解!这种多重嵌套让我很困惑。
答案 0 :(得分:1)
['hits']["hits"]
不是["_source"]
的词典
但是列表中包含一个或多个具有["_source"]
的项目
这意味着
tweets['hits']["hits"][0]["_source"]
tweets['hits']["hits"][1]["_source"]
tweets['hits']["hits"][2]["_source"]
所以这应该有用
for item in tweets['hits']["hits"]:
print(item["_source"]['text'])
答案 1 :(得分:0)
不确定你是否意识到这一点,但JSON被转换为Python字典,而不是列表。无论如何,让我们进入这个巢。
tweets['hits']
会给你另一个词。
tweets['hits']['hits']
会给你一个清单(注意括号)
这显然是一个字典列表,在这种情况下(不确定它是否总是如此),你正在寻找的带有“_source”键的字典是第一个,所以:
tweets['hits']['hits'][0]
会给你你想要的词典。然后,最后:
tweets['hits']['hits'][0]['_source']
应该为您提供文字。
答案 2 :(得分:0)
第二个“命中”的值是一个列表。
尝试:
for hit in tweets["hits"]["hits"]:
print(hit["_source"]["text"])