Skip to main content
 首页 » 编程设计

python之键为数字时的字典顺序

2025年05月04日16daizhj

我们知道常规的 Python 字典是无序的,但是当键是自然数集时呢? hash 函数似乎是一个恒等函数,当定义域是一组自然数时,迭代类似 x = {0:'a', 1:'b', 2 :'c'} 似乎产生了键的自然顺序,也就是 0、1、2..

那么这种行为可以依赖吗?

(是的,我知道 OrderedDict)

编辑:

这是我的具体用法,或者至少这捕获了我正在看的东西的精神。

x = dict((a, chr(a)) for a in range(10))

我在 x 中: 打印我

这似乎保持秩序。

请您参考如下方法:

没有。永远,永远,永远不要依赖字典键的顺序。一个说明性的例子:

>>> {0: 1, 8: 2} 
{0: 1, 8: 2} 
>>> {8: 1, 0: 2} 
{8: 1, 0: 2} 

发生这种情况是因为字典从 8 个桶开始。因此,0 和 8 最终会出现在同一个桶中,这将立即导致碰撞。顺序取决于先插入哪个。 (但也不要依赖于此:初始大小不能保证!)

但是,您是正确的,int(在 Python 2.x 中)的 hash 是身份函数(唯一的异常(exception)是 - 1,它映射到 -2 以避免与通常的“错误返回”值发生冲突)。然而,int 和 long 之间的区别有时非常微妙,long 使用不同的哈希算法(因为它们可以任意大) .