Il tuo JSON è un array con un singolo oggetto all'interno, quindi quando lo leggi all'interno ottieni un elenco con un dizionario all'interno. Puoi accedere al tuo dizionario accedendo all'elemento 0 nell'elenco, come mostrato di seguito:
json1_data = json.loads(json1_str)[0]
Ora puoi accedere ai dati memorizzati nei punti dati esattamente come ti aspettavi:
datapoints = json1_data['datapoints']
Ho un'altra domanda se qualcuno può mordere: sto cercando di prendere la media dei primi elementi in questi punti dati (ovvero punti dati [0] [0]). Solo per elencarli, ho provato a fare datapoints [0: 5] [0] ma tutto quello che ottengo è il primo datapoint con entrambi gli elementi invece di voler ottenere i primi 5 datapoint contenenti solo il primo elemento. C'è un modo per fare questo?
datapoints[0:5][0]
non fa quello che ti aspetti. datapoints[0:5]
restituisce una nuova sezione di elenco contenente solo i primi 5 elementi, quindi aggiungendo [0]
alla fine di esso verrà utilizzato solo il primo elemento di quella sezione di elenco risultante . Quello che devi usare per ottenere il risultato che vuoi è una comprensione della lista :
[p[0] for p in datapoints[0:5]]
Ecco un modo semplice per calcolare la media:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Se sei disposto a installare NumPy , allora è ancora più semplice:
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
L'uso ,
dell'operatore con la sintassi di suddivisione per gli array di NumPy ha il comportamento che ti aspettavi inizialmente con le sezioni di elenco.