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,但是什么会导致内部订单改变?
编辑:我不需要保留订单,所以我会坚持使用词典。我只是想知道为什么会这样。我认为订单没有保证,但一旦它有任意的内部订单,它就会坚持下去以供日后迭代。
答案 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类