Python 字典迭代顺序意外排序。为什么? [复制]

2023-12-12

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

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

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


字典不是按随机顺序排列的。他们在随意的命令。在这种情况下,你很幸运,它们被排序了。明天,他们可能就不再是这样了。如果您需要随机性,请使用random。如果您需要排序顺序,请使用sorted()。正如@BenjaminWohlwend 在评论中提到的,您可以使用collections.OrderedDict跟踪插入顺序。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 字典迭代顺序意外排序。为什么? [复制] 的相关文章

随机推荐