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]
Vous pouvez désormais accéder aux données stockées dans des points de données exactement comme vous vous y attendiez:
datapoints = json1_data['datapoints']
J'ai une autre question si quelqu'un peut mordre: j'essaie de prendre la moyenne des premiers éléments de ces points de données (c'est-à-dire les points de données [0] [0]). Juste pour les énumérer, j'ai essayé de faire des points de données [0: 5] [0] mais tout ce que j'obtiens est le premier point de données avec les deux éléments au lieu de vouloir obtenir les 5 premiers points de données 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 uniquement les 5 premiers éléments, puis l'ajout [0]
à la fin de celui-ci ne prendra que 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 la liste :
[p[0] for p in datapoints[0:5]]
Voici un moyen simple de calculer la moyenne:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Si vous êtes prêt à installer NumPy , c'est encore plus simple:
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'utilisation de l' ,
opérateur avec la syntaxe de découpage pour les tableaux de NumPy a le comportement que vous attendiez à l'origine avec les découpages de liste.