【问题标题】:I keep getting keyError: "data" Python我不断收到 keyError: "data" Python
【发布时间】:2023-03-16 19:59:01
【问题描述】:

好的..我实际上已经非常努力地自己解决了这个问题,但我似乎无法弄清楚。

我正在尝试访问一个 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'

知道问题是什么吗..?

【问题讨论】:

  • 您想要data 中的哪些对象?使用你的代码我得到25 结果
  • 也许你想要print [d['data']['score'] for d in data['data']['children']]?给出 25 scores: [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]

标签: python json url


【解决方案1】:

看起来您想要来自该json 对象的所有分数。

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

像以前一样使用for-loop:

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]

希望这会有所帮助。

【讨论】:

  • 我真的不知道这是否是我的计算机的问题,但我复制了您的代码完全相同,我的代码的 topbit 包含 import 和 url,但仍然有错误消息。 .. score = [d['data']['score'] for d in data['data']['children']] KeyError: 'data'
  • 哦,对不起,是的,你是对的......你需要在网址中添加.jsonurl1 = "https://www.reddit.com/user/clockwork8.json";并使用json.load 方法,而不是loadsdata = json.load(response)
  • 好的,非常感谢!!你能解释一下你的代码格式是什么..?它是否遍历 data['data']['children'] 中 ['data']['score'] 的每个实例?
  • 是的,没错! data['data']['children'] 返回 25 个对象,每个 ALSO 都有一个 data 键(这让我感到困惑)。因此,d in data['data']['children'] 格式将 25 个结果中的每一个分配给 d,然后您将遍历每个实例,如您所说,调用它们的 ['data']['score']
  • 我明白了...所以d['data']['score'] 前面的d 是data['data']['children'] 中的每个字典,对吧?这是一种非常简洁的代码编写方式!我在哪里可以了解更多关于以这样的格式编写它的信息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
相关资源
最近更新 更多