Python,使用通配符访问字典
我有一本包含项的字典,其中键是某种正则表达式。我正在寻找一个函数,以便在传递匹配字符串时返回匹配项的列表Python,使用通配符访问字典,python,regex,dictionary,Python,Regex,Dictionary,我有一本包含项的字典,其中键是某种正则表达式。我正在寻找一个函数,以便在传递匹配字符串时返回匹配项的列表 d = {'a.b': item1, 'b.c':item2} func(d,'a1b') >>> [item1] func(d,'b2c') >>> [item2] 有没有类似蟒蛇的方法?我能想到的唯一解决方案是: import re def func(d, event): res = list() for key, item in
d = {'a.b': item1, 'b.c':item2}
func(d,'a1b')
>>> [item1]
func(d,'b2c')
>>> [item2]
有没有类似蟒蛇的方法?我能想到的唯一解决方案是:
import re
def func(d, event):
res = list()
for key, item in d.iteritems():
if re.match(key, event):
res.append(item)
return res
您不需要在这些值上循环。只要一把钥匙就足够了:
import re
def func(d, event):
res = []
for key in d.keys():
if re.match(key, event):
res.append(d[key])
return res
这是一个生成器版本。这一个更快,因为它不存储整个列表,只在需要时生成:
def func(d, event):
for key in d.keys():
if re.match(key, event):
yield d[key]
和一艘班轮:
#1 List Comprehension
return [d[key] for key in d.keys() if re.match(key, event)]
#2 Generator Expression
return (d[key] for key in d.keys() if re.match(key, event))
您可以创建一个类来包装dictionary类:
import re
class RegexDict(dict):
def get_matching(self, event):
return (self[key] for key in self if re.match(key, event))
使用示例:
>>> d = {'a.b': 'item1', 'b.c': 'item2'}
>>> rd = RegexDict(d)
>>> for o in rd.get_matching('a1b'):
print o
item1
这使您不必依赖外部函数,它使开销保持较小,并且更加健壮
您还可以添加另一个函数,该函数将列表(或iter)作为输入并返回所有匹配值:
def get_all_matching(self, events):
return (match for event in events for match in self.get_matching(event))
>>> for o in rd.get_all_matching(['a1b', 'b2c']):
print o
item1
item2
你是说d.keys()?@InbarRose等等,我今天有点慢。哪一个?哦哈哈哈。固定的!对不起。谢谢修正了你的基因表达。