我正在尝试传递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是一个数组,其中包含单个对象,因此当您阅读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]在其末尾添加将仅从 结果列表切片中 获取第一个元素。您需要使用以获得列表结果的方法:
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数组的切片语法一起使用会产生您最初期望的与列表切片相同的行为。
,