键是数字时的字典顺序

Edg*_*ian 1 python dictionary

我们知道常规的Python字典是无序的,但是当键是自然数字集的情况呢?hash当域是一组自然数时,该函数似乎是一个身份函数,并且迭代过度x = {0:'a', 1:'b', 2:'c'}似乎产生键的自然顺序,即0,1,2 ..

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

(是的我知道OrderedDict)

编辑:

这是我的具体用法,或者至少这可以捕捉到我所关注的精神.

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

for i in x: print i

这似乎保持秩序.

nne*_*neo 6

不.永远不要依赖字典键的顺序.一个说明性示例:

>>> {0: 1, 8: 2}
{0: 1, 8: 2}
>>> {8: 1, 0: 2}
{8: 1, 0: 2}
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为字典以8个桶开始.因此,0和8最终在同一个桶中,这将导致立即冲突.顺序取决于首先插入的顺序.(但不要依赖于那个:初始大小不是保证!)

你是正确的,但是,在hashintS(在Python 2.x的)是恒等函数(唯一的例外-1,它被映射到-2以避免与通常的"错误回报"的价值冲突).然而,有时区别intlong非常微妙,并且long使用不同的哈希算法(因为它们可以任意大).

  • 很好的例子.我记得需要更多的钥匙才能看到这个 (2认同)