JSON ของคุณเป็นอาร์เรย์ที่มีวัตถุหนึ่งชิ้นอยู่ภายในดังนั้นเมื่อคุณอ่านในนั้นคุณจะได้รับรายการที่มีพจนานุกรมอยู่ภายใน คุณสามารถเข้าถึงพจนานุกรมของคุณโดยการเข้าถึงรายการ 0 ในรายการดังที่แสดงด้านล่าง:
json1_data = json.loads(json1_str)[0]
ตอนนี้คุณสามารถเข้าถึงข้อมูลที่เก็บไว้ในดาต้าพอยน์ได้อย่างที่คุณคาดไว้:
datapoints = json1_data['datapoints']
ฉันมีคำถามอีกหนึ่งข้อถ้าใครสามารถกัดได้: ฉันพยายามหาค่าเฉลี่ยขององค์ประกอบแรกในดาต้าพอยน์เหล่านี้ (เช่นดาต้าพอยน์ [0] [0]) เพียงเพื่อแสดงรายการฉันพยายามทำดาต้าพอยน์ [0: 5] [0] แต่ทั้งหมดที่ฉันได้รับคือดาต้าพอยน์แรกที่มีองค์ประกอบทั้งสองตรงข้ามกับที่ต้องการรับ 5 ดาต้าพอยน์แรกที่มีองค์ประกอบแรกเท่านั้น มีวิธีทำเช่นนี้หรือไม่?
datapoints[0:5][0]
ไม่ได้ทำในสิ่งที่คุณคาดหวัง datapoints[0:5]
ส่งกลับรายการชิ้นใหม่ที่มีเพียง 5 องค์ประกอบแรกแล้วเพิ่ม[0]
ที่ส่วนท้ายของมันจะใช้เพียงองค์ประกอบแรกจากรายการชิ้นที่เกิดขึ้น สิ่งที่คุณต้องใช้เพื่อให้ได้ผลลัพธ์ที่คุณต้องการคือความเข้าใจในรายการ :
[p[0] for p in datapoints[0:5]]
นี่เป็นวิธีง่ายๆในการคำนวณค่าเฉลี่ย:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
หากคุณยินดีที่จะติดตั้งNumPyก็จะยิ่งง่ายขึ้น:
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
การใช้,
โอเปอเรเตอร์กับไวยากรณ์ตัวแบ่งส่วนข้อมูลสำหรับอาร์เรย์ของ NumPy นั้นมีลักษณะการทำงานที่คุณคาดหวังไว้เมื่อใช้ชิ้นส่วนรายการ