应该按照命令存储密钥?

时间:2011-07-21 11:56:23

标签: python

我有一个以整数作为键的字典。请告诉我,dict是否存储带有排序键的数据?

我写了一些代码来测试(如下):

>>> 
>>> d = {1: 'a', 3: 'a'}
>>> d
{1: 'a', 3: 'a'}
>>> d[2] = 'a'
>>> d
{1: 'a', 2: 'a', 3: 'a'}
>>> 

但我不确定这种行为是否符合标准并一直有效。

3 个答案:

答案 0 :(得分:4)

python中的字典没有排序。在这里阅读更多关于dicts: http://docs.python.org/library/stdtypes.html?highlight=dict#dict

但您可以使用sorted python built-in method对键进行排序:

for k in sorted(myDict):
    myDict[k] # do something

或者在这里查看collections.OrderedDict implementation

您也可以混合使用排序方法和OrderedDict以便稍后使用它(确保只会在您不添加新项目时使用它 - 否则最好使用排序方法):

d = {1: 'a', 3: 'a'}   
from collections import OrderedDict   
sorted_d = OrderedDict((k, d[k]) for k in sorted(d))

答案 1 :(得分:3)

稍微进行一些试验会很快向您展示它们没有排序:

>>> d = {1: 'a', 3: 'a', 8: 'a'}
>>> d
{8: 'a', 1: 'a', 3: 'a'}

但即使这是依赖于实现的。完全不依赖于订单。

答案 2 :(得分:1)

内部字典不保留按键的排序顺序。如果你想要一个C python的快速C实现,请查看在我的用于CPython的ordereddict包中包含的sorteddict: http://anthon.home.xs4all.nl/Python/ordereddict/