我有一个Python对象数组,并且我希望获得对于给定的逻辑公式求值为true的所有对象。
假设对象是任务跟踪系统中的任务。每个任务都有一个状态、一个任务接受者和一个截止日期。现在,我想要获取此公式中所有求值为true的对象:
(assignee=cdecker OR due=tomorrow) AND status=open对于像对象字段(assignee和status)这样的东西,它将是一个简单的检查相等的问题,而due=tomorrow将是一个在对象上被调用的函数。
有没有一个简单的解析器可以用来解析表达式,然后为我开始的集合中的所有对象计算它(基本上是将所有文字连接到函数调用)?
发布于 2012-05-31 17:13:24
试试pyparsing。下面是一个语法分析器,它支持相等、布尔运算和嵌套括号:
from pyparsing import *
expr = Forward()
factor = Forward()
term = Forward()
iand = Literal("AND").suppress()
ior = Literal("OR").suppress()
ieq = Literal("=").suppress()
lpar = Literal("(").suppress()
rpar = Literal(")").suppress()
ident = Word(alphas)
atom = ident | lpar + expr + rpar
factor << Group(atom + ZeroOrMore(ieq + atom))("equal")
term << Group(factor + ZeroOrMore(iand + term))("and")
expr << Group(term + ZeroOrMore(ior + expr))("or")您可以将此应用于您的公式,以获得类似于树的结构,您可以在以后的某个时候对其进行评估,例如:
formula = "(assignee=cdecker OR due=tomorrow) AND status=open"
tree = expr.parseString(formula, parseAll=True)
print tree.asXML()发布于 2012-05-31 05:07:31
定义一个执行测试的函数,然后:
[obj for obj in list_of_obj if func(obj)]https://stackoverflow.com/questions/10824040
复制相似问题