JSON是一个内部有单个对象的数组,因此当您读入JSON时,会得到一个内部带有字典的列表。您可以通过访问列表中的项目0来访问字典,如下所示:
json1_data = json.loads(json1_str)[0]
现在,您可以按预期访问存储在数据点中的数据:
datapoints = json1_data['datapoints']
我还有一个问题,是否有人可以咬:我正在尝试获取这些数据点(即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数组的切片语法一起使用会产生您最初期望的与列表切片相同的行为。