我正在尝试传入一个 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).
json1_data
dict
list
type(json1_data)
我错过了什么?我需要这是一本字典,这样我才能访问其中一个键。
您的 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]在其末尾添加将只取 结果列表切片中 的第一个元素。你需要使用来获得你想要的结果是一个列表理解:
datapoints[0:5][0]
datapoints[0: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 数组的切片语法一起使用具有您最初对列表切片所期望的行为。
,