Twój JSON jest tablicą z jednym obiektem w środku, więc kiedy go czytasz, dostajesz listę ze słownikiem w środku. Dostęp do słownika można uzyskać, uzyskując dostęp do pozycji 0 na liście, jak pokazano poniżej:
json1_data = json.loads(json1_str)[0]
Teraz możesz uzyskać dostęp do danych przechowywanych w punktach danych, tak jak się spodziewałeś:
datapoints = json1_data['datapoints']
Mam jeszcze jedno pytanie, czy ktoś może gryźć: staram się wziąć średnią pierwszych elementów z tych punktów danych (tj. Punktów danych [0] [0]). Aby je wymienić, próbowałem zrobić punkty danych [0: 5] [0], ale dostaję tylko pierwszy punkt danych z oboma elementami, w przeciwieństwie do chęci otrzymania pierwszych 5 punktów danych zawierających tylko pierwszy element. Czy jest na to sposób?
datapoints[0:5][0]
nie robi tego, czego oczekujesz. datapoints[0:5]
zwraca nowy wycinek listy zawierający tylko 5 pierwszych elementów, a następnie dodanie [0]
na końcu zajmie tylko pierwszy element z wynikowego wycinka listy . To, czego potrzebujesz, aby uzyskać pożądany wynik, to zrozumienie listy :
[p[0] for p in datapoints[0:5]]
Oto prosty sposób obliczenia średniej:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Jeśli chcesz zainstalować NumPy , jest to jeszcze łatwiejsze:
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
Używanie ,
operatora ze składnią wycinania dla tablic NumPy ma takie zachowanie, jakiego pierwotnie oczekiwałeś przy wycinkach listy.