JSON Anda adalah larik dengan satu objek di dalamnya, jadi ketika Anda membacanya, Anda mendapatkan daftar dengan kamus di dalamnya. Anda dapat mengakses kamus Anda dengan mengakses item 0 dalam daftar, seperti yang ditunjukkan di bawah ini:
json1_data = json.loads(json1_str)[0]
Sekarang Anda dapat mengakses data yang disimpan dalam datapoints seperti yang Anda harapkan:
datapoints = json1_data['datapoints']
Saya punya satu pertanyaan lagi jika ada yang bisa menggigit: Saya mencoba mengambil rata-rata elemen pertama dalam datapoints ini (yaitu datapoints [0] [0]). Hanya untuk daftar mereka, saya mencoba melakukan datapoints [0: 5] [0] tetapi yang saya dapatkan adalah datapoint pertama dengan kedua elemen yang bertentangan dengan keinginan untuk mendapatkan 5 datapoints pertama yang hanya berisi elemen pertama. Apakah ada cara untuk melakukan ini?
datapoints[0:5][0]
tidak melakukan apa yang Anda harapkan. datapoints[0:5]
mengembalikan potongan daftar baru yang hanya berisi 5 elemen pertama, dan kemudian menambahkannya [0]
akan mengambil elemen pertama dari potongan daftar yang dihasilkan . Apa yang perlu Anda gunakan untuk mendapatkan hasil yang Anda inginkan adalah pemahaman daftar :
[p[0] for p in datapoints[0:5]]
Berikut cara sederhana untuk menghitung rata-rata:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Jika Anda ingin menginstal NumPy , maka itu bahkan lebih mudah:
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
Menggunakan ,
operator dengan sintaks slicing untuk array NumPy memiliki perilaku yang semula Anda harapkan dengan slice daftar.