使用嵌套的for循环来迭代Python中的推文的JSON文件

时间:2017-11-26 21:59:08

标签: python json twitter

所以我是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)

非常感谢任何见解!这种多重嵌套让我很困惑。

3 个答案:

答案 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"])