什么决定了字典中项目的顺序(特别是在 Python 中,尽管这可能适用于其他语言)?例如:
>>> spam = {'what':4, 'shibby':'cream', 'party':'rock'}
>>> spam
{'party': 'rock', 'what': 4, 'shibby': 'cream'}
如果我再次调用垃圾邮件,这些项目仍将按相同的顺序排列。但是这个顺序是如何决定的呢?
什么决定了字典中项目的顺序(特别是在 Python 中,尽管这可能适用于其他语言)?例如:
>>> spam = {'what':4, 'shibby':'cream', 'party':'rock'}
>>> spam
{'party': 'rock', 'what': 4, 'shibby': 'cream'}
如果我再次调用垃圾邮件,这些项目仍将按相同的顺序排列。但是这个顺序是如何决定的呢?
普通字典中的顺序是基于内部散列值的,所以你不应该对它做任何假设。
用于collections.OrderedDict
您控制其顺序的字典。
根据 python文档,
字典有时在其他语言中被称为“关联记忆”或“关联数组”。与由一系列数字索引的序列不同,字典由键索引,键可以是任何不可变类型;字符串和数字总是可以作为键。
它们是任意的,再次来自文档:
字典的键几乎是任意值。不可散列的值,即包含列表、字典或其他可变类型的值(按值而不是对象标识进行比较)不能用作键。用于键的数字类型遵循数字比较的常规规则:如果两个数字比较相等(例如 1 和 1.0),那么它们可以互换使用来索引同一个字典条目。(但请注意,由于计算机将浮点数存储为近似值,因此将它们用作字典键通常是不明智的。)
因为字典键存储在哈希表中。根据http://en.wikipedia.org/wiki/Hash_table:
可以有效地枚举存储在哈希表中的条目(以每个条目的恒定成本),但只能以某种伪随机顺序。