密钥存在时的Python Dictonary KeyError

时间:2015-10-17 00:42:04

标签: python python-3.x

我是python的新手,我正在用它做作业。

我在Debian 8上使用PyEDA和Python3。

我创建了一个名为:

的变量
R = exprvars('r', n, n)

n = 4,这给了我:

farray([[r[0,0], r[0,1], r[0,2], r[0,3]],
    [r[1,0], r[1,1], r[1,2], r[1,3]],
    [r[2,0], r[2,1], r[2,2], r[2,3]],
    [r[3,0], r[3,1], r[3,2], r[3,3]]])

然后,在一些逻辑之后,我用它创建一个CNF布尔函数f和一个BDD:

f = expr2bdd(f)

然后,表达式:

U = f.satisfy_one()

给了我:

{r[2,1]: 0, r[3,2]: 1, r[1,1]: 1, r[0,2]: 0, r[0,3]: 1, r[2,2]: 0, r[2,3]: 0, r[3,3]: 0, r[3,1]: 0, r[1,2]: 0, r[0,1]: 0, r[1,0]: 0, r[2,0]: 1, r[3,0]: 0, r[0,0]: 0, r[1,3]: 0}

但这是我无法理解的: 我在期待

U[R[0,0]]

要返回0,而是它给我

KeyError: r[0,0]

有什么问题? R[0,0]给了我r[0,0],字典确实将它作为密钥。

[编辑]

当我说R[0,0]给我r[0,0]时,这意味着我使用pdb打印它,在U = f.satisfy_one()之后放置一个断点:

(Pdb) p R[0,0]
r[0,0]

1 个答案:

答案 0 :(得分:1)

这需要更多细节。

怎么说,r[0,0]给了我assert list(U.keys())[0] == R[2,1] ?你打印过吗?

尝试验证您是否正在寻找相同的

print(list(type(U.keys())[0])
print(type(R[2,1])

查看值

U

看看它们是否匹配,只有匹配时,你才能收集它。

另外,检查{{1}}本身是否有任何方法可以为您执行查询。