JSON文字列をリストではなく辞書に変換する質問する

JSON文字列をリストではなく辞書に変換する質問する

JSON ファイルを渡してデータを辞書に変換しようとしています。

これまで私がやったことは以下の通りです:

import json
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)

json1_dataタイプになることを期待していますが、で確認するとdict実際に タイプとして出てきます。listtype(json1_data)

何が足りないのでしょうか? キーの 1 つにアクセスできるようにするには、これを辞書にする必要があります。

ベストアンサー1

JSON は内部に 1 つのオブジェクトを含む配列なので、これを読み込むと内部に辞書を含むリストが取得されます。以下に示すように、リスト内の項目 0 にアクセスすることで辞書にアクセスできます。

json1_data = json.loads(json1_str)[0]

これで、期待どおりにデータポイントに保存されたデータにアクセスできるようになります。

datapoints = json1_data['datapoints']

誰か興味があれば、もう 1 つ質問があります。これらのデータポイント (つまり、datapoints[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

インストールしたい場合はナンピそうすれば、さらに簡単になります:

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 の配列のスライス構文で演算子を使用すると、リスト スライスで当初期待していた動作が得られます。

おすすめ記事