小编典典

将 JSON 字符串转换为字典未列表

all

我正在尝试传入一个 JSON 文件并将数据转换为字典。

到目前为止,这就是我所做的:

import json
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)

我期待json1_data成为dict一种list类型,但当我使用type(json1_data).

我错过了什么?我需要这是一本字典,这样我才能访问其中一个键。


阅读 78

收藏
2022-05-19

共1个答案

小编典典

您的 JSON 是一个内部包含单个对象的数组,因此当您读取它时,您会得到一个包含字典的列表。您可以通过访问列表中的第 0 项来访问您的字典,如下所示:

json1_data = json.loads(json1_str)[0]

现在您可以访问存储在 数据点 中的数据,就像您期望的那样:

datapoints = json1_data['datapoints']

如果有人能咬,我还有一个问题:我试图取这些数据点中第一个元素的平均值(即数据点 [0] [0])。只是为了列出它们,我尝试做
datapoints[0:5][0] 但我得到的只是包含两个元素的第一个数据点,而不是想要获得仅包含第一个元素的前 5 个数据点。有没有办法做到这一点?

datapoints[0:5][0]不符合您的预期。datapoints[0:5]返回一个仅包含前 5
个元素的新列表切片,然后[0]在其末尾添加将只取 结果列表切片中
的第一个元素。你需要使用来获得你想要的结果是一个列表理解

[p[0] for p in datapoints[0:5]]

这是计算平均值的简单方法:

sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8

如果你愿意安装NumPy,那就更简单了:

import numpy
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)[0]
datapoints = numpy.array(json1_data['datapoints'])
avg = datapoints[0:5,0].mean()
# avg is now 35.8

,运算符与 NumPy 数组的切片语法一起使用具有您最初对列表切片所期望的行为。

2022-05-19