内部字典顺序可以改变吗?

时间:2016-08-16 13:02:13

标签: python dictionary hashmap

exampleDict = {'a':1, 'b':2, 'c':3, 'd':4}

上面的字典最初按此顺序迭代:

b=2
d=4
a=1
c=3

然后,我在代码中移动了大量文件,现在按顺序迭代:

d=4
a=1
c=3
b=2

我知道订单内部存储为hashmap,但是什么会导致内部订单改变?

编辑:我不需要保留订单,所以我会坚持使用词典。我只是想知道为什么会这样。我认为订单没有保证,但一旦它有任意的内部订单,它就会坚持下去以供日后迭代。

2 个答案:

答案 0 :(得分:5)

Dict没有来自documentation

的固定订单
  

CPython实现细节:键和值列在   非随机的任意顺序因Python而异   实现,并取决于字典的插入历史   和删除。

如果你真的需要保持秩序,有一个名为OrderedDict的对象:

from collections import OrderedDict
exampleDict = OrderedDict({'a':1, 'b':2, 'c':3, 'd':4})

另请参阅OrderedDict文档here

答案 1 :(得分:-1)

是。如果你确实改变了对dict的不同调用之间的代码,迭代的顺序将会改变。

来自docs

  

如果调用items(),keys(),values(),iteritems(),iterkeys()和itervalues()而没有对字典进行干预修改,则列表将直接对应。

如果插入顺序很重要,请查看OrderedDict