将整数作为键的Python字典是否自然排序?

问题描述 投票:17回答:6

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

即将

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

for item in my_dict.items():
  print item

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

python dictionary integer key sorted
6个回答
12
投票

总之,不。我敢打赌,您注意到字典将键的哈希用作数组的索引,并且由于int哈希到其自身的值,因此您推断出,如果插入的值的键是整数,则插入的值将按键顺序结束。尽管该陈述的前两个部分是正确的,但推论不是正确的,即使作为未记录的副作用也是如此。 dict键是从键的哈希值中得出的,而不是完整的哈希值。这意味着即使使用整数键,由于2个值可能在同一位置发生冲突(甚至具有“乱序”的散列值),因此您仍然可以乱序插入,最终导致乱序地将键插入字典。[基本上,将其视为字典的内部存储阵列中的索引是键哈希中的一些低阶位。仅仅因为一个数字大于另一个数字并不意味着从其截断的低阶位构建的值将更大,甚至不同。


6
投票
不,Python字典不具有固有的顺序,而与键值无关。如果需要排序,请坚持使用数组或列表,或者更好的方法是-签出pandas,这将允许字典使用类似的功能来按键值以及许多其他强大功能(http://pandas.pydata.org/pandas-docs/stable/10min.html)进行调用。

2
投票

2
投票
我不这么认为。您必须使用collections.OrderedDict以确保订购。但是,这将按照条目的添加顺序对其进行排序。

1
投票
Python字典没有以任何有意义的方式排序;它们是哈希表。

0
投票
我参加聚会很晚,但是如果像我一样,您通过[您最喜欢的搜索引擎]偶然浏览了此页面,那么我想成为向您发送好消息的人:
© www.soinside.com 2019 - 2024. All rights reserved.