Pythonの辞書型(dict)でドットアクセス(dot notation)するメモ
ちょいちょいググったり、自前実装したりするのですが、、、
アレやコレや試した感じ、以下のクラスを作るのが一番お手軽な気がする👻
class DictDotNotation(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__dict__ = self
以下、使い方メモ👀
新規作成
dict_sample = DictDotNotation()
print(dict_sample)
{}
値追加
ドットアクセスでの追加。
dict_sample.key01 = 'XXXX'
print(dict_sample)
{'key01': 'XXXX'}
通常のキー指定での追加。
dict_sample['key02'] = 123
print(dict_sample)
{'key01': 'XXXX', 'key02': 123}
複数のキーを追加。
dict_sample.update(key03=456, key04=789, key05='AAAA', key06='BBBB')
print(dict_sample)
{'key01': 'XXXX', 'key02': 123, 'key03': 456, 'key04': 789, 'key05': 'AAAA', 'key06': 'BBBB'}
値変更
ドットアクセスでの変更。
dict_sample.key01 = 'YYYY'
print(dict_sample)
{'key01': 'YYYY', 'key02': 123, 'key03': 456, 'key04': 789, 'key05': 'AAAA', 'key06': 'BBBB'}
通常のキー指定での変更。
dict_sample['key01'] = 'ZZZZ'
print(dict_sample)
{'key01': 'ZZZZ', 'key02': 123, 'key03': 456, 'key04': 789, 'key05': 'AAAA', 'key06': 'BBBB'}
値参照
ドットアクセスでの参照。
print(dict_sample.key01)
ZZZZ
通常のキー指定での参照。
print(dict_sample['key01'])
ZZZZ
get()での参照。
print(dict_sample.get('key01'))
ZZZZ
get()での参照。※指定キーがdict内に無い場合
print(dict_sample.get('key07'))
None
get()での参照。※指定キーがdict内に無く、デフォルト値指定した場合
print(dict_sample.get('key07', False))
False
キー削除
ドットアクセスでの削除。
del dict_sample.key02
print(dict_sample)
{'key01': 'ZZZZ', 'key03': 456, 'key04': 789, 'key05': 'AAAA', 'key06': 'BBBB'}
通常のキー指定での削除。
del dict_sample['key03']
print(dict_sample)
{'key01': 'ZZZZ', 'key04': 789, 'key05': 'AAAA', 'key06': 'BBBB'}
pop()での削除。
print(dict_sample.pop('key04'))
print(dict_sample)
789
{'key01': 'ZZZZ', 'key05': 'AAAA', 'key06': 'BBBB'}
clear()での削除。
dict_sample.clear()
print(dict_sample)
{}
値追加 ※クラス生成時
コンストラクタの引数にdict形式のデータを渡す。
dict_sample = DictDotNotation({'key01':'01', 'key02':'02','key03':'03','key04':'04'})
print(dict_sample)
{'key01': '01', 'key02': '02', 'key03': '03', 'key04': '04'}
キー一覧取得
通常のdictと同様にkeys()で取得。
for key in dict_sample.keys():
print(key)
key01
key02
key03
key04
値一覧取得
通常のdictと同様にvalues()で取得。
for value in dict_sample.values():
print(value)
01
02
03
04
アイテム一覧取得
通常のdictと同様にitems()で取得。
for key, value in dict_sample.items():
print(key, value)
key01 01
key02 02
key03 03
key04 04
キー有無確認
print('key01' in dict_sample)
True
print('key10' in dict_sample)
False
dictの長さ取得
print(len(dict_sample))
4
Discussion
ご存知かもしれませんがAttrDictというパッケージがあるのでご参考までに。