2013-05-25 33 views
1

我想知道在python存储键:值对中的字典以什么顺序。我在我的python shell中编写了以下内容,但我无法弄清楚它存储关键字的顺序的原因是什么:值对。python存储数据中的字典按什么顺序?

>>> d = {} 
>>> d['a'] = 8 
>>> d['b'] = 8 
>>> d 
{'a': 8, 'b': 8} 
>>> d['c'] = 8 
>>> d 
{'a': 8, 'c': 8, 'b': 8} 
>>> d['z'] = 8 
>>> d 
{'a': 8, 'c': 8, 'b': 8, 'z': 8} 
>>> d['w'] = 8 
>>> d 
{'a': 8, 'c': 8, 'b': 8, 'z': 8, 'w': 8} 

我也试过同样的事情,对于相同的键不同的值。但订单保持不变。增加一个关键字:值对提供了另一个无法辨认的结果。这里是:

>>> d[1] = 8 
>>> d 
{'a': 8, 1: 8, 'c': 8, 'b': 8, 'w': 8, 'z': 8} 
+0

没有保证排序;插入和删除以及关键值决定了排序。 –

+0

字典在python中是无序的,在列表和元组中,@Indradhanush Gupta在评论中有一个很好的链接 –

+0

@MartijnPieters我使用了另一个名为c的字典。它有相同的顺序。 –

回答

3

简短的回答是:按照实现定义的顺序。你不能依赖也不应该期望任何特定的顺序,并且在以一种所谓无关的方式改变字典之后它可以改变。

虽然不是直接的,它以某种方式在Dictionary view objects解释说:

键和值遍历在非随机的,不同的Python实现不同而不同,取决于插入的字典历史上的一个任意次序和删除。如果按键,值和项目视图被重复执行而不对词典进行中间修改,则项目顺序将直接对应。

1

词典没有可预测的顺序,因为它们的键由散列存储。如果您需要订购,请使用listcollections.OrderedDict

1

这是一个hash table。密钥部分按其散列值hash(key)排序,但字典的实际遍历顺序可能取决于元素插入的顺序,字典中元素的数量以及可能的其他因素。你永远不应该指望它是什么特别的东西。