字典中填充了连续的整数键,如下所示:
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
事实证明,这是我想要的行为,但不是我的预期。我期望随机顺序的字典迭代。这里发生了什么,我可以在公开发布的代码中依赖这种行为吗?
答案 0 :(得分:2)
字典不是随机顺序。它们按arbitrary顺序排列。在这种情况下,你很幸运,他们被分类。明天,他们可能不会。如果您需要随机性,请使用random
。如果您需要排序顺序,请使用sorted()
。正如@BenjaminWohlwend在评论中提到的那样,您可以使用collections.OrderedDict
来跟踪广告订单。
在这种情况下,我猜测字典正在进行某种小整数键优化,就像一个数组(例如hash(1) == 1
)。这不是一种保证的行为,可能在其他Python实现上有所不同。
答案 1 :(得分:1)
订单不是随机的,而是随意的。这意味着你不能依赖它以任何特定顺序迭代。它有时可能按顺序排列,但你不能认为它会是。