将JSONstring转换为字典而不是列表

我想传递一个JSON文件并将数据转换成字典。

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

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

我期待json1_data是一个json1_data ,但它实际上出来作为一个listtypes,当我检查type(json1_data)

我错过了什么? 我需要这个字典,所以我可以访问其中一个键。

你的JSON是一个内部有单个对象的数组,所以当你阅读它的时候,你会得到一个里面有字典的列表。 您可以通过访问列表中的项目0来访问您的字典,如下所示:

 json1_data = json.loads(json1_str)[0] 

现在,您可以按照您的预期访问存储在数据点中的数据

 datapoints = json1_data['datapoints'] 

我还有一个问题,如果有人可以咬:我试图取这些数据点的第一个元素的平均值(即数据点[0] [0])。 只是列出它们,我试着做数据点[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的数组使用带有切片语法的,运算符具有您最初期望使用列表切片的行为。