我有一个以整数作为键的字典。请告诉我,dict是否存储带有排序键的数据?
我写了一些代码来测试(如下):
>>>
>>> d = {1: 'a', 3: 'a'}
>>> d
{1: 'a', 3: 'a'}
>>> d[2] = 'a'
>>> d
{1: 'a', 2: 'a', 3: 'a'}
>>>
但我不确定这种行为是否符合标准并一直有效。
答案 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/