一尘不染

将整数作为键的Python字典会自然排序吗?

python

如果我创建一个使用整数作为键的Python字典,是否可以安全地假设对dict进行迭代将根据键值按顺序检索项目?

即会

my_dict = {}
for x in range(0,100):
  my_dict[x] = str(x)

for item in my_dict.items():
  print item

总是导致按键值顺序打印列表?


阅读 278

收藏
2021-01-20

共1个答案

一尘不染

简而言之,没有。我敢打赌,您注意到字典将键的哈希用作数组的索引,并且由于int哈希到它们自己的值,因此您推断出,如果插入的值的键是整数,则插入的值将按键顺序结束。尽管该语句的前两个部分是正确的,但即使是未记录的副作用,该推论也不是正确的。dict键是从键的散列
派生
的,但不是完整的散列。这意味着即使使用整数键,由于2个值可能在同一位置发生冲突(甚至具有“乱序”的哈希值),因此最终仍然会乱序插入,最终导致乱序地将键插入字典

基本上,可以将其视为dict的内部存储数组中的索引,该索引是键哈希值中一定数量的低阶位。仅仅因为一个数字大于另一个数字并不意味着从其截断的低阶位构建的值将更大甚至不同。

2021-01-20