Votre JSON est un tableau avec un seul objet à l'intérieur, donc lorsque vous le lisez, vous obtenez une liste avec un dictionnaire à l'intérieur. Vous pouvez accéder à votre dictionnaire en accédant à l'élément 0 de la liste, comme indiqué ci-dessous :
json1_data = json.loads(json1_str)[0]
Maintenant, vous pouvez accéder aux données stockées dans datapoints comme vous le souhaitiez:
datapoints = json1_data['datapoints']
J'ai une autre question si quelqu'un peut mordre : J'essaie de calculer la moyenne des premiers éléments de ces datapoints(c'est-à-dire datapoints[0][0]). Juste pour les lister, j'ai essayé de faire datapoints[0:5][0] mais tout ce que j'obtiens est le premier datapoint avec les deux éléments au lieu de vouloir obtenir les 5 premiers datapoints contenant uniquement le premier élément. Y a-t-il un moyen de faire cela ?
datapoints[0:5][0]
ne fait pas ce que vous attendez. datapoints[0:5]
renvoie une nouvelle tranche de liste contenant simplement les 5 premiers éléments, et en ajoutant [0]
à la fin cela prendra simplement le premier élément de cette tranche de liste résultante. Ce que vous devez utiliser pour obtenir le résultat souhaité est une compréhension de liste:
[p[0] for p in datapoints[0:5]]
Voici une manière simple de calculer la moyenne :
sum(p[0] for p in datapoints[0:5])/5. # Le résultat est 35.8
Si vous êtes prêt à installer NumPy, alors c'est encore plus facile :
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 est maintenant 35.8
Utiliser l'opérateur ,
avec la syntaxe de découpage des tableaux de NumPy a le comportement que vous attendiez initialement avec les tranches de liste.