dict(辞書)の参照、dict[ 正規表現 ] で参照する
場合、dict のサブクラスで以下のようにする。
import re class rdict(dict): def __getitem__(self, key): p = re.compile(key) r = [ v for k,v in self.items() if p.search(k) ] return r if len(r) > 0 else KeyError def get(self, k, d=None): p = re.compile(k) r = [v for k, v in self.items() if p.search(k)] if len(r)==1: return r[0] return r if len(r) > 1 else d
これは、search() を使ってるので、先頭からマッチせず途中からマッチでも
抽出するようになっている。
match() を使えば先頭文字からマッチである。
実行
dct = { 'item': 'apple', 'price': 170, 'pin': "PIN-08334-2334", "pitype": "orange30" } rd = rdict(dct) print(rd['price']) print(rd['pi.*']) # [170] # ['PIN-08334-2334', 'orange30'] print(rd.get('price')) print(rd.get('pi.*')) # 170 # ['PIN-08334-2334', 'orange30']