首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过滤与给定逻辑公式匹配的对象

过滤与给定逻辑公式匹配的对象
EN

Stack Overflow用户
提问于 2012-05-31 04:49:18
回答 2查看 128关注 0票数 0

我有一个Python对象数组,并且我希望获得对于给定的逻辑公式求值为true的所有对象。

假设对象是任务跟踪系统中的任务。每个任务都有一个状态、一个任务接受者和一个截止日期。现在,我想要获取此公式中所有求值为true的对象:

代码语言:javascript
运行
复制
(assignee=cdecker OR due=tomorrow) AND status=open

对于像对象字段(assigneestatus)这样的东西,它将是一个简单的检查相等的问题,而due=tomorrow将是一个在对象上被调用的函数。

有没有一个简单的解析器可以用来解析表达式,然后为我开始的集合中的所有对象计算它(基本上是将所有文字连接到函数调用)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-31 17:13:24

试试pyparsing。下面是一个语法分析器,它支持相等、布尔运算和嵌套括号:

代码语言:javascript
运行
复制
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")

您可以将此应用于您的公式,以获得类似于树的结构,您可以在以后的某个时候对其进行评估,例如:

代码语言:javascript
运行
复制
formula = "(assignee=cdecker OR due=tomorrow) AND status=open"
tree = expr.parseString(formula, parseAll=True)
print tree.asXML()
票数 1
EN

Stack Overflow用户

发布于 2012-05-31 05:07:31

定义一个执行测试的函数,然后:

代码语言:javascript
运行
复制
[obj for obj in list_of_obj if func(obj)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10824040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档