JSON は内部に単一のオブジェクトを含む配列であるため、それを読み取ると内部に辞書を含むリストが取得されます。以下に示すように、リストの項目 0 にアクセスすることで辞書にアクセスできます。
json1_data = json.loads(json1_str)[0]
これで、期待どおりにデータポイントに格納されたデータにアクセスできます。
datapoints = json1_data['datapoints']
誰かが噛むことができるかどうか、もう1つ質問があります。これらのデータポイント(つまり、データポイント[0] [0])の最初の要素の平均を取得しようとしています。それらをリストするために、 datapoints[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 の配列のスライス構文で演算子を使用する,
と、リスト スライスで最初に期待していた動作が得られます。