BETA

【Python】辞書/JSONで定数を管理する

投稿日:2019-05-24
最終更新:2019-05-24

マジックナンバーは定数化して管理するのが定石ですが、
定数が増えてくると管理が大変です。

そこで辞書を使って管理するためのTIPSを紹介します。

※ 記載しているIDは生成したダミーデータです。
【Python】18桁の整数をランダム生成する - GraffitiNote

定数を並べる

例えばこんな感じ。
明らかに関係のある定数も別々で定義している状態。

ID_USER_DEVELOPER = 637830961515091929  
ID_CHANNEL_LOGIN = 635343748595645529  
ID_CHANNEL_DEBUG = 201164310260256715  
ID_CHANNEL_QUESTION = 130682891339737632  
ID_CATEGORY_MUSICBOT = 701397109218154247  
ID_CATEGORY_ISSUES = 755990327092537255  
ID_CATEGORY_CLOSED = 772300922722547208  
ID_GUILD_BOT = 704012177034641692  

この場合は使いたい場所に定数名をそのまま書くだけですね。

辞書の導入

上記の例をアンダーバー区切りで辞書に入れてみます。

ID = {  
    'user': {  
        'developer': 637830961515091929,  
    },  
    'channel': {  
        'login': 635343748595645529,  
        'debug': 201164310260256715,  
        'question': 130682891339737632,  
    },  
    'category': {  
        'musicbot': 701397109218154247,  
        'issues': 755990327092537255,  
        'closed': 772300922722547208,  
    },  
    'guild': {  
        'bot': 704012177034641692,  
    },  
}  

分類が見やすくなりましたね。
この場合の要素の取得方法は以下の2パターンです。

ID['channel']['login']  
ID.get('channel').get('login')  

因みに指定を間違えた場合、
上ではKeyError例外が返り、下ではNoneが返ります。
Pythonの辞書のgetメソッドでキーから値を取得(存在しないキーでもOK) | note.nkmk.me

attrdictの導入

辞書をそのまま使うと、括弧とかクォーテーションを書くのが面倒なので、
attrdict というパッケージを導入します。

from attrdict import AttrDict  

# 上で定義したID辞書をAttrDictに渡す  
ID = AttrDict(ID)   

# 要素の取得  
ID.channel.login  

これで記述がスッキリしました。

JSONで扱う

辞書が膨れ上がると、
JSONファイルに書き出して使いたくなると思います。

とりあえず書き出しと読み込みは以下のような関数で処理します。

import json  

def input_json(filename):  
    with open(filename, 'r') as f:  
        return json.load(f)  

def output_json(filename, obj):  
    with open(filename, 'w') as f:  
        json.dump(obj, f, indent=4, ensure_ascii=False)  

そしてJSONファイルを使うと全体的にこんな感じになると思います。

from attrdict import AttrDict   
ID = input_json('id.json')  
ID = AttrDict(ID)  
ID.channel.login  

これで定数を自由自在に扱えますね!

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

備忘録のようなもの

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!