LoginSignup
1
4

More than 5 years have passed since last update.

Pythonの辞書を属性としてアクセスできるようにする

Posted at

やりたいこと

タイトルが正しくやりたいことを表現できてるのかいまいちわかりませんが、要はこういうことをやりたいなと思うことがたまにあります。JSを書いた後とかは特に。。

d = dict(a=1, b=2)

# ふつうこんな感じで使う
d["c"] = d["a"] + d["b"]

# こんな感じがいいんだけどなぁ
d.c = d.a + d.b

こたえ

辞書をちょっと拡張して、__setattr____setitem__にマッピングすればいいのですね(getもしかり)。ハッピー!

sklearn.datasets.base.Bunch

おまけ

属性になることで、IPython上で補完が効くようになります。例えば、requestsモジュールを使っているとして、「いまのレスポンスヘッダの中身が見たい!」ってときに、タブだけで候補がずらっと出てくれるようになります。


import requests
from sklearn.datasets.base import Bunch as dict

# GitHub APIを叩いてみる
response = requests.get("https://api.github.com")
headers = dict(**response.headers)

この状態でheader.<TAB>とすると・・・

スクリーンショット 2017-02-19 2.49.59.png

こうなりますので、いちいちheaders["X-RateLimit-Remaining"]などと打つのに比べてストローク数はだいぶ減らせますね。ウェーイ!!からの・・

スクリーンショット 2017-02-19 3.12.07.png

お・・おお・・・

1
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4