JSON'unuz içinde tek bir nesne bulunan bir dizidir, bu yüzden içinde okuduğunuzda içinde bir sözlük bulunan bir liste alırsınız. Sözlüğünüze, aşağıda gösterildiği gibi listedeki 0 öğesine erişerek erişebilirsiniz:
json1_data = json.loads(json1_str)[0]
Artık saklanan verilere erişebilir datapoints Beklediğiniz gibi:
datapoints = json1_data['datapoints']
Herkes ısırırsanız bir soru daha var: Bu veri noktaları (yani veri noktaları [0] [0]) ilk unsurların ortalamasını almaya çalışıyorum. Sadece onları listelemek için veri noktaları yapmayı denedim [0: 5] [0] ama tüm aldığım sadece ilk elemanı içeren ilk 5 veri noktasını almak istemek yerine her iki elemanla da ilk veri noktası. Bunu yapmanın bir yolu var mı?
datapoints[0:5][0]
beklediğinizi yapmaz. datapoints[0:5]
yalnızca ilk 5 öğeyi içeren yeni bir liste dilimi döndürür ve ardından [0]
sonuna ekleme , sonuçta elde edilen liste diliminden yalnızca ilk öğeyi alır . İstediğiniz sonucu elde etmek için kullanmanız gereken bir liste kavramasıdır :
[p[0] for p in datapoints[0:5]]
Ortalamayı hesaplamanın basit bir yolu:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
NumPy'yi kurmak istiyorsanız , o zaman daha da kolay:
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
Kullanılması ,
numpy en diziler için dilimleme sözdizimi operatöre başlangıçta liste dilimleri ile bekliyorduk davranış vardır.