1

我想知道 python 中的字典以什么顺序存储键:值对。我在我的 python shell 中写了以下内容,但我无法弄清楚它存储键的顺序的原因是什么:值对。

>>> d = {}
>>> d['a'] = 8
>>> d['b'] = 8
>>> d
{'a': 8, 'b': 8}
>>> d['c'] = 8
>>> d
{'a': 8, 'c': 8, 'b': 8}
>>> d['z'] = 8
>>> d
{'a': 8, 'c': 8, 'b': 8, 'z': 8}
>>> d['w'] = 8
>>> d
{'a': 8, 'c': 8, 'b': 8, 'z': 8, 'w': 8}

我还尝试了相同键的不同值的相同操作。但顺序保持不变。再添加一个 key : value 对会给出另一个无法确定的结果。这里是 :

>>> d[1] = 8
>>> d
{'a': 8, 1: 8, 'c': 8, 'b': 8, 'w': 8, 'z': 8}
4

4 回答 4

3

简短的回答是:按照实现定义的顺序。您不能依赖也不应该期望任何特定的顺序,并且它可以在以所谓的不相关方式更改字典后更改。

虽然不是直接的,但它在Dictionary view objects中以某种方式解释:

键和值以非随机的任意顺序迭代,随 Python 实现而变化,并取决于字典的插入和删除历史。如果键、值和项目视图被迭代而没有对字典进行干预修改,项目的顺序将直接对应。

于 2013-05-25T18:25:31.260 回答
1

元素是根据其键的散列存储的。文档声明密钥必须是可散列类型

于 2013-05-25T18:23:27.047 回答
1

字典没有可预测的顺序,因为它们的键是由散列存储的。如果您需要订购,请使用listcollections.OrderedDict

于 2013-05-25T18:24:04.757 回答
1

这是一个哈希表。键按其哈希值部分排序hash(key),但字典的实际遍历顺序可能取决于插入元素的顺序、字典中元素的数量以及可能的其他因素。你永远不应该指望它是什么特别的东西。

于 2013-05-25T18:24:43.290 回答