Pythonの学習の過程とか

学習の記録をつけておきましょう。Python3に少しずつ移行していきます。過去の記事のソースを2から3に、、、と考えましたが、新しいことをやったほうがいいですね。

Pythonの基礎 ファイル (JSON) 読み込み編 その2

Pythonの基礎 JSONの読み込み編2

読み込んだJSONから情報を得る

前回までで、JSONの読み込みはできるようになりました。 インデントをつけて、ソートして表示までできますから、かなり見やすいところまでは来ています。 しかし、これがWebAPIからの膨大な量だとすると、、、、、もう少し整形して使いやすいようにしておきたいですね。 自分が必要とする情報だけを取り出したり、任意の順番で表示させたりと、色々なことが考えられます。

Dictionaryになっているので、ルールを考えて取り出せばよい

キーと値の組み合わせを考えて、必要なところだけを取り出しましょう。

今回は、group1とgroup2から値が50以上のキーと値だけを取り出してみます。

jsonData.jsonは
こんな感じのjsonです
{
    "group1": {
        "Adam": 40,
        "Bob": 74,
        "Chris": 60,
        "David": 71
    },
    "group2": {
        "Eric": 44,
        "John": 44,
        "Mike": 99,
        "ken": 33
    }
}

やり方

"group"のキーに対する値ごとにDictionaryとして読み込み、そこから値をチェックするだけですね。

ではサンプルコード。 今回も初心者向け、って感じです。

#coding:utf-8

import json

f = open('jsonData2.json', 'r')

jsonData = json.load(f)

#jsonの中身を確かめたいときは、このコメントを外せばよい
#print json.dumps(jsonData, sort_keys = True, indent = 4)

#ここでキーをリスト化する。ここではもちろんgroupのこと。
keyList = jsonData.keys()

#キーでソートする。
keyList.sort()

for k in keyList:
        print "[", k,"]"
        groupDict = jsonData[k]
        #取得しgroupDictが見たければ下のコメントを外す
        #print groupDict

        #ここでgroupListのキーを取得してnameListとする
        nameList = groupDict.keys()
        #これでキーである名前を並べ替えることができた
        nameDict.sort()

        #nameListをforでひとつずつチェックして、値を判定する
        for name in nameList:
                #print name
                #あとは判定するだけ
                if groupDict[name] >= 50:
                        print "%s's value is %d" % (name, groupDict[name])

f.close()

結果は以下

#実行結果
[ group1 ]
Bob's value is 74
Chris's value is 60
David's value is 71
[ group2 ]
Mike's value is 99

値が50以上のキーと値そのものを表示させることができました。 簡単ですが、コードを見てみましょう。

jsonデータをファイルから読み込んでから

"group"部分のキーを取得してソートする

簡単ですね。このデータではgroupデータは二つだけなので拍子抜けかもしれませんが (^_^;A、キーをソートすることができます。

#ここでキーをリスト化する。ここではもちろんgroupのこと。
keyList = jsonData.keys()

#キーでソートする。
keyList.sort()

groupキーで値をリスト化する

すでに取得したgroupキーを使い、対応する値をgroupDictとして取得します。 このとき、値も辞書型になっていますから、まだこのままでは使えません。 groupDictからキーである名前を取り出してソートします。 for文の前にやったことと同じですね。

for k in keyList:
        print "[", k,"]"
        groupDict = jsonData[k]
        #取得しgroupDictが見たければ下のコメントを外す
        #print groupDict

        #ここでgroupDictのキーを取得してnameListとする
        nameList = groupDict.keys()
        #これでキーである名前を並べ替えることができた
        nameList.sort()

名前をキーとして値をチェックする

あとは簡単ですね。 groupDictに対し、nameListで値を取り出し、判定し、表示させます。

        #nameListをforでひとつずつチェックして、値を判定する
        for name in nameList:
                #print name
                #あとは判定するだけ
                if groupDict[name] >= 50:
                        print "%s's value is %d" % (name, groupDict[name])

今回は少ないデータで分かりやすかったと思います。 これがもっと複雑なjsonになったとしても、リストや辞書を使って効率的にデータを取り出すことができればいいですね。

初めてのPython 第3版

初めてのPython 第3版