Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我一直收到keyrerror:“我的;“数据”;python_Python_Json_Url - Fatal编程技术网

我一直收到keyrerror:“我的;“数据”;python

我一直收到keyrerror:“我的;“数据”;python,python,json,url,Python,Json,Url,好的。。事实上,我自己也很努力地想弄明白这一点,但我似乎就是弄不明白 我正在尝试访问一个json文件,并打印出一些我想要的东西 我尝试访问的url如下: 这就是交易 我现在有: import urllib, json, unicodedata username1 = raw_input('Username: ') url1 = "https://www.reddit.com/user/clockwork8" response = urllib.urlopen(url1) data = jso

好的。。事实上,我自己也很努力地想弄明白这一点,但我似乎就是弄不明白

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

我尝试访问的url如下:

这就是交易

我现在有:

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'])):
KeyError: 'data'
所以我试了一下:

for a in range(len(data['data']['children'])):
    print data['data']['children'][a]['data']['score'].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'])):
KeyError: 'data'

你知道问题出在哪里吗?

看起来你想要的是来自
json
对象的所有分数

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

像您一样使用
进行
循环:

for d in data['data']['children']:
    print d['data']['score']
将一次打印一个
“分数”
,或者您可以使用python的列表理解语法在列表中获得所有
“分数”
,该语法为我们提供了一行代码:

scores = [d['data']['score'] for d in data['data']['children']]
分数
现在包含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]

希望这有帮助。

您想要
数据中的哪些对象?使用您的代码,我得到了
25
结果您是否希望
为数据['data']['children']]中的d打印[d['data']['score']
?我真的不知道我的电脑是否有问题,但我复制了你的代码,代码的顶端包含导入和url,但仍然有一条错误消息。。。分数=[d['data']['score']数据['data']['children']]中的d的分数[d['data']['score']键错误:“数据”哦,对不起,是的,你是对的。。。您需要将
.json
添加到url:
url1=”https://www.reddit.com/user/clockwork8.json“
;使用
json.load
方法,而不是
load
data=json.load(response)
好的,非常感谢!!你能解释一下你的代码是什么格式的吗。。?它是否在数据['data']['children']中迭代['data']['score']的每个实例?是的,没错
data['data']['children']
返回25个对象,每个对象都有一个
data
键(这让我很困惑)。因此,data['data']['children']
中的格式
d将25个结果中的每一个分配给
d
,然后您迭代每个实例,正如您所说,调用它们的
['data']['score']
我明白了。。。所以
d['data']['score']
前面的d是
data['data']['children']
中的每个字典,对吗?这是一种编写代码的干净方法!我在哪里可以学到更多关于以这种格式编写的信息?