🗒️

Pythonの辞書型(dict)でドットアクセス(dot notation)するメモ

2022/10/19に公開1

ちょいちょいググったり、自前実装したりするのですが、、、
アレやコレや試した感じ、以下のクラスを作るのが一番お手軽な気がする👻

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