use*_*927 17 python dictionary integer key sorted
如果我创建一个使用整数作为键的Python dict,我可以安全地假设迭代dict将根据键值按顺序检索项目吗?
即会
my_dict = {}
for x in range(0,100):
my_dict[x] = str(x)
for item in my_dict.items():
print item
Run Code Online (Sandbox Code Playgroud)
总是导致按键值顺序打印列表?
Sil*_*Ray 12
简而言之,没有.我打赌你注意到字典使用键的哈希作为数组的索引,并且因为ints哈希到它们自己的值,你推断如果它们的键是整数,插入的值将按键顺序结束.虽然该陈述的前两部分是真实的,但推论并非如此,即使是无证的副作用.dict键来自键的哈希值,但不是完整的哈希值.这意味着即使使用整数键,您仍然可以进行无序插入,因为2个值可能在同一位置发生冲突(或者甚至具有"乱序"散列导出的值),因此最终会导致无序插入键字典.
基本上,将其视为dict的内部存储阵列中的索引,该索引是来自密钥哈希的一些低阶位.仅仅因为一个数字大于另一个数字并不意味着从它的截断低阶位构建的值将变得更大,甚至不同.
不,无论关键值如何,Python词典都没有固有的排序.如果您需要订购,请坚持使用数组或列表,或者更好 - 检查pandas,这将允许类似的词典能够通过键值调用,以及许多其他强大的功能(http://pandas.pydata.org/ pandas-docs/stable/10min.html).