Python

时间:2016-12-19 21:28:30

标签: python json boolean boolean-logic boolean-expression

我有以下JSON:

{
  "condition": "AND",
  "rules": [
    {
      "condition": "OR",
      "rules": [
        {
          "id": "u.url",
          "operator": "contains",
          "value": "URL_A"
        },
        {
          "id": "u.url",
          "operator": "contains",
          "value": "URL_B"
        }
      ]
    },
    {
      "condition": "OR",
      "rules": [
        {
          "id": "u.url",
          "operator": "contains",
          "value": "URL_C"
        },
        {
          "id": "u.url",
          "operator": "contains",
          "value": "URL_D"
        }
      ]
    }
  ]

表示布尔公式:(A or B) and (C or D)其中A例如是此JSON对象:

{
   "id": "u.url",
   "operator": "contains",
   "value": "URL_A"
}

通常,JSON文件可以表示具有(仅)AND和OR运算符的任何布尔逻辑。

问题是返回表示原始公式的产品总和的字符串。那就是:(A or C) and (A or D) and (B or C) and (B or D)。 例如,结果将是:

(u.url contains URL_A) OR (u.url contains URL_C) AND
(u.url contains URL_A) OR (u.url contains URL_D) AND
(u.url contains URL_B) OR (u.url contains URL_C) AND
(u.url contains URL_B) OR (u.url contains URL_D)

1 个答案:

答案 0 :(得分:1)

Python有一个json库,可以将您的Json数据转换为字典列表。您可以实现一个能够输出SOP的递归函数。

例如:

>>> import json
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
'[1,2,3,{"4":5,"6":7}]'

如果您使用DFS递归到基地,您可以找到基本表达式并按照自己的方式进行备份。

通过词典列表,直到你达到一个基本状态(即dict没有条件字段。

然后备份并采用这两个规则并对其应用操作。这可以通过一个带有两个字典并返回字符串的函数来完成。

由于您正在进行DFS,因此您将进入下一个分支,并发现您返回C或D'。

然后你将留下根,这两个分支将合并在一起。

这一切都说,如果你不熟悉递归和DFS以及如何在Python中实现这个问题基本上就变成了,嘿,有人为我实现了一个完整的python实现"

为了帮助您进一步发布,请发布可以审核的代码。我怀疑是否有人会为此发布完全实现的代码。