Python字典迭代顺序意外排序。为什么?

时间:2015-05-13 20:05:23

标签: python dictionary

字典中填充了连续的整数键,如下所示:

d = dict()
for i in range(0, 10):
    d[i] = 100-i

稍后,字典项会像这样迭代:

for k, v in d.items():
    print k, v

结果显示项目按数字顺序迭代:

0 100
1 99
2 98
3 97
4 96
5 95
6 94
7 93
8 92
9 91

事实证明,这是我想要的行为,但不是我的预期。我期望随机顺序的字典迭代。这里发生了什么,我可以在公开发布的代码中依赖这种行为吗?

2 个答案:

答案 0 :(得分:2)

字典不是随机顺序。它们按arbitrary顺序排列。在这种情况下,你很幸运,他们被分类。明天,他们可能不会。如果您需要随机性,请使用random。如果您需要排序顺序,请使用sorted()。正如@BenjaminWohlwend在评论中提到的那样,您可以使用collections.OrderedDict来跟踪广告订单。

在这种情况下,我猜测字典正在进行某种小整数键优化,就像一个数组(例如hash(1) == 1)。这不是一种保证的行为,可能在其他Python实现上有所不同。

答案 1 :(得分:1)

订单不是随机的,而是随意的。这意味着你不能依赖它以任何特定顺序迭代。它有时可能按顺序排列,但你不能认为它会是。