2

好的,这个应该很简单。我有3本词典。它们的制作、订购和填充都令我满意,但我想将它们全部放在一个总括字典中,以便我可以更轻松、更有效地参考和操作它们。

Layer0 = {}
Layer1 = {}
Layer2 = {}

它们在创建时就在这里,之后我根据 SO 问题无力地尝试了不同的东西:

Layers = {Layer0, Layer1, Layer2}

这引发了语法错误

Layers = {'Layer0', 'Layer1', 'Layer2'}

这引发了另一个语法错误

Layers是我正在尝试创建的字典,其中包含所有以前制作的字典)

我在 SO 上找到的所有其他示例都与在字典中创建字典以填充它们(或同时填充它们)有关,并且由于我已经编写了大量行来制作这些字典,我宁愿将它们放入事后的字典,而不是重写代码。

放入时最好保留字典的顺序Layers

有谁知道这是否可能以及我应该怎么做?

4

2 回答 2

10

字典项既有键又有值。

Layers = {'Layer0': Layer0, 'Layer1': Layer1, 'Layer2': Layer2}
于 2012-08-15T18:35:51.803 回答
2

请记住,字典没有顺序,因为字典是一个哈希表(即从您的键名到唯一哈希值的映射)。使用 .keys() 或 .values() 会生成一个列表,该列表确实有顺序,但字典本身没有。

因此,当您说“最好在放入图层时保留字典的顺序” - 这并不意味着什么。例如,如果您将字典从“Layer1、Layer2、Layer3”重命名为“A、B、C”,您将看到 Layers.keys() 以“A、C、B”的顺序打印。无论您在构建字典时使用的顺序如何,这都是正确的。这一切都表明“C”的哈希值小于“B”的哈希值,它并没有告诉你任何关于字典结构的信息。

这也是为什么您不能直接遍历字典的原因(您必须遍历例如键列表)。

附带说明一下,这个哈希函数允许字典进行疯狂的快速查找。一个好的散列函数将为您提供恒定时间 [O(1)] 查找,这意味着您可以在相同的时间内检查给定项目是否在您的字典中,无论字典包含十个项目还是一千万个项目。很酷。

于 2012-08-15T19:20:57.573 回答