以正确的组合查找字典之间的公共值集

2024-09-20 00:00:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python中构建一个推理系统,它将根据我的知识库中的现有语句来判断查询是否可以推断。你知道吗

输入为:

  1. Predicate1(x,y) ^ Predicate2(x,y,z) ^ Predicate3(y,z) ^ Predicate4(Constant,z) => Predicate5(r)

  2. Predicate1(X1,Y1)

  3. Predicate1(X1,Y2)

  4. Predicate1(X4,Y5)

  5. Predicate2(X1,Y1,Z1)

  6. Predicate2(X4,Y2,Z1)

  7. Predicate3(Y2,X1)

  8. Predicate3(Y1,Z1)

  9. Predicate4(Constant1,Z1)

  10. Predicate4(Constant2,Z5)

我的查询是谓词5(R1)。你知道吗

所以1的LHS。我的问题必须是真的。你知道吗

谓词的所有参数要么是变量(小写),要么是常量(从大写开始),要么是常量和变量的混合体,可以有任意数量的参数。你知道吗

我正在使用递归反向链接方法来计算每个谓词的所有可能值——每个都是Predicate1、Predicate2等的值,它返回一个字典列表。你知道吗

例如,LHS上的每个连接点

谓词1将具有[{'x':'X1','y':'Y1'},{'x':'X1','y':'Y2'},{'x':'X4','y':'Y5'}]

谓词2将有[{'x':'X1','y':'Y1','z':'Z1'},{'x':'X4','y':'Y2','z':'Z1'}]

谓词3将有[{'y':'Y2','z':'X1'},{'y':'Y1','z':'Z1'}]

谓词4将有[{'z':'Z1'},{'z':'Z5}]

我想到的方法是创建一个新的变量到值列表映射(另一个字典),方法是扫描每个谓词的所有字典,删除其他谓词字典中不存在的变量的值,如果还不存在,则向这个字典添加新变量。你知道吗

这里的问题是它必须是正确的组合。例如,由于Predicate1的字典,Predicate2的{'x':'X4','y':'Y2','z':'Z1'}不能为true(Predicate1没有'x':'X4''y':'Y2'。你知道吗

我基本上需要计算所有谓词中为真的公共变量到值,并返回它们。如果一个或多个这样的组合不存在,则返回False;否则返回list和True。你知道吗

对于上述示例,“x”应仅取“X1”,“y”仅取“Y1”,“z”:“Z1”。 i、 例如,输出应该是[{x:'X1','y':'Y1','z':'Z1'}]

我应该使用itertools或类似的方法来实现这一点吗?你有没有想过要怎么做?你知道吗

任何帮助都将不胜感激!谢谢!你知道吗


Tags: 方法字典谓词x1lhsy1x4y2