Ihr JSON ist ein Array mit einem einzelnen Objekt. Wenn Sie es einlesen, erhalten Sie eine Liste mit einem Wörterbuch. Sie können auf Ihr Wörterbuch zugreifen, indem Sie auf Element 0 in der Liste zugreifen, wie unten gezeigt:
json1_data = json.loads(json1_str)[0]
Jetzt können Sie wie erwartet auf die in Datenpunkten gespeicherten Daten zugreifen :
datapoints = json1_data['datapoints']
Ich habe noch eine Frage, ob jemand beißen kann: Ich versuche, den Durchschnitt der ersten Elemente in diesen Datenpunkten (dh Datenpunkte [0] [0]) zu ermitteln. Um sie aufzulisten, habe ich versucht, Datenpunkte [0: 5] [0] zu erstellen, aber alles, was ich bekomme, ist der erste Datenpunkt mit beiden Elementen, anstatt die ersten 5 Datenpunkte zu erhalten, die nur das erste Element enthalten. Gibt es eine Möglichkeit, dies zu tun?
datapoints[0:5][0]
tut nicht was du erwartest. datapoints[0:5]
Gibt ein neues Listen-Slice zurück, das nur die ersten 5 Elemente enthält. Wenn Sie [0]
am Ende hinzufügen , wird nur das erste Element aus dem resultierenden Listen-Slice entnommen . Was Sie verwenden müssen, um das gewünschte Ergebnis zu erzielen, ist ein Listenverständnis :
[p[0] for p in datapoints[0:5]]
Hier ist eine einfache Methode zur Berechnung des Mittelwerts:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Wenn Sie bereit sind, NumPy zu installieren , ist es noch einfacher:
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
Die Verwendung des ,
Operators mit der Slicing-Syntax für NumPy-Arrays hat das Verhalten, das Sie ursprünglich mit den Listen-Slices erwartet hatten.