Ваш 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 имеет поведение, которое вы изначально ожидали с использованием срезов списка.