使い方
ありそうでなかったので書いた。メモとして残します。
辞書をrdict
型にキャストすれば正規表現もキー値として使えるようになるやつです。
標準辞書型を継承しているので、普通の機能も使えると思います。
>>d = {'#a': 'item1', '#b': 'item2','q#': 'item3'}
>>rd = rdict(d)
>>print rd[".*"]
['item2', 'item1', 'item3']
>>print rd["#.*"]
['item2', 'item1']
>>print rd["#a"]
item1
>>print rd.keys()
['#b', '#a', 'q#']
ソース
rdict.py
#もっといいやり方あれば教えて欲しいです。
import re
class rdict(dict):
def __getitem__(self, key):
try:
return super(rdict, self).__getitem__(key)
except:
try:
ret=[]
for i in self.keys():
m= re.match("^"+key+"$",i)
if m:ret.append( super(rdict, self).__getitem__(m.group(0)) )
except:raise(KeyError(key))
return ret
#制限
辞書にキー.*
が含まれていると、正規表現.*
ではそのキーの値のみを返します。(キー全てにマッチできない)