将JSONstring转换为字典而不是列表
我想传递一个JSON文件并将数据转换成字典。
到目前为止,这是我所做的:
import json json1_file = open('json1') json1_str = json1_file.read() json1_data = json.loads(json1_str)
我期待json1_data
是一个json1_data
,但它实际上出来作为一个list
types,当我检查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的数组使用带有切片语法的,
运算符具有您最初期望使用列表切片的行为。