假设我有一本路径集字典:my_dict['some_key'] = {'abc/hi/you','xyz/hi/you','jkl/hi/you'}我想看看这条路径是否出现在这个集合中。如果我有完整的路径,我只需执行以下操作:str = 'abc/hi/you'if str in my_dict['some_key']: print(str)但如果我不知道和b之间是什么怎么办?如果它实际上可以是任何东西呢?如果我是在一个壳里,我就会把它收起来。acls*我想要做的是让 str 成为 regx:regx = '^a.*c/hi/you$' #just assume this is the ideal regex. Doesn't really matter.if regx in my_dict['some_key']: print('abc/hi/you') #print the actual path, not the regx实现这样的事情的干净、快速的方法是什么?
2 回答
不负相思意
TA贡献1777条经验 获得超10个赞
您需要循环遍历集合而不是简单的调用。
为了避免为示例设置整个集合字典,我将其抽象为简单的 my_set。
import re
my_set = {'abc/hi/you','xyz/hi/you','jkl/hi/you'}
regx = re.compile('^a.*c/hi/you$')
for path in my_set:
if regx.match(path):
print(path)
我选择编译而不是仅仅re.match()因为该集合在实际实现中可能有超过 100 万个元素。
开心每一天1111
TA贡献1836条经验 获得超13个赞
您可以set子类化该类并实现a in b运算符
import re
from collections import defaultdict
class MySet(set):
def __contains__(self, regexStr):
regex = re.compile(regexStr)
for e in self:
if regex.match(e):
return True
return False
my_dict = defaultdict(MySet)
my_dict['some_key'].add('abc/hi/you')
regx = '^a.*c/hi/you$'
if regx in my_dict['some_key']:
print('abc/hi/you')
添加回答
举报
0/150
提交
取消