我一直得到keyError:“data”Python

时间:2017-03-17 01:38:21

标签: python json url

好吧..我实际上已经非常努力地想出这个,但我似乎无法弄明白。

我正在尝试访问json文件,并打印出我想要的一些东西。

我想要访问的网址是: https://www.reddit.com/user/clockwork8.json

所以这是交易

我现在:

import urllib, json, unicodedata

username1 = raw_input('Username: ')
url1 = "https://www.reddit.com/user/clockwork8"
response = urllib.urlopen(url1)
data = json.loads(response.read())

位于代码的顶部,我尝试了以下两个选项:

for number in data["data"]["children"]:
    for fordata in data["data"]["children"][number]:
        if fordata == "data":
            for key in data["data"]["children"][post][fordata]:
                if key == "score":
                    print data["data"]["children"][post]["data"][key].encode('ascii')
                if key == "link_url":
                    print data["data"]["children"][post]["data"][key].encode('ascii')

这给了我这个错误:

    for fordata in data["data"]["children"][number]:
TypeError: list indices must be integers, not dict

所以我尝试了这个:

for a in range(len(data['data']['children'])):
    print data['data']['children'][a]['data']['score'].encode('ascii')

现在它给了我这个错误:

    for a in range(len(data['data']['children'])):
KeyError: 'data'

知道问题是什么......?

1 个答案:

答案 0 :(得分:0)

看起来你想要那个json对象的所有分数。

data['data']['children']中的每个对象都有一个data键,因此我们需要在每个对象上调用data。此外,要获取每个data 'score'值,我们需要调用其[data][score]

像你一样使用for - 循环:

for d in data['data']['children']:
    print d['data']['score']

会一次打印每个'score'一个,或者您可以使用python的列表理解语法获取列表中的所有'scores',这样我们就可以获得一行:

scores = [d['data']['score'] for d in data['data']['children']]

scores现在包含25个值的列表:

[3, 1, 2, 1, 0, 2, 1, 0, -3, 9, 1, 3, 2, 2, 4, 2, 1, 2, 16, -1, 58, 3, 1, 0, -18]

希望这有帮助。