Pythonの辞書をドットでアクセス
Pythonの「辞書」はとても便利なデータ構造ですが、「x」というキーに関連づけられている値を取り出すのには「['x']」とキー以外に4文字も書かなければ行けなくて面倒です。
>>> p = dict(x=1, y=2) >>> p {'y': 2, 'x': 1} >>> p['x'] 1JavaScriptみたいにp.xでアクセスできると便利です。 そこでp.xでアクセスできるようにする関数を作りました。
>>> p = modulize(p) >>> p.x 1実装はこちら:
>>> def modulize(dictionary): import imp m = imp.new_module("") m.__dict__.update(dictionary) return mなお、modulizeの時点で辞書がコピーされているので、modulize済みのオブジェクトのメンバを書き換えても元の辞書は変化しません。
>>> p = dict(x=1, y=2) >>> p2 = modulize(p) >>> p2.x = 100 >>> p {'y': 2, 'x': 1}変更済みの辞書を取得するには下のように__dict__を使います…ってモジュールにしたせいで__doc__とかが勝手に追加されていますね…
>>> p2.__dict__ {'y': 2, '__name__': '', '__doc__': None, 'x': 100}…すなおに下のように書いた方がいいかも。
>>> class MyDict(dict): __getattr__ = dict.__getitem__ __setattr__ = dict.__setitem__ __delattr__ = dict.__delitem__ >>> MyDict() {} >>> d = _ >>> d.x = 1 >>> d {'x': 1} >>> d.x 1 >>> del d.x >>> d {}