擅长:python、mysql、java
<p>检查<a href="http://hg.python.org/cpython/file/52f68c95e025/Objects/dictobject.c" rel="nofollow">source code of the python dict</a>可以看到连续的字符串或整数产生的冲突较少。这结合@skishhore关于更好的缓存本地性的评论可能是答案。在</p>
<blockquote>
<p>Major subtleties ahead: Most hash schemes depend on having a "good"
hash function, in the sense of simulating randomness. Python doesn't:
its most important hash functions (for strings and ints) are very
regular in common cases:</p>
<pre><code>>>> map(hash, (0, 1, 2, 3))
[0, 1, 2, 3]
>>> map(hash, ("namea", "nameb", "namec", "named"))
[-1658398457, -1658398460, -1658398459, -1658398462]
>>>
</code></pre>
<p>This isn't necessarily bad! To the contrary, in a table of size 2**i,
taking the low-order i bits as the initial table index is extremely
fast, and there are no collisions at all for dicts indexed by a
contiguous range of ints. The same is approximately true when keys are
"consecutive" strings. So this gives better-than-random behavior in
common cases, and that's very desirable.</p>
</blockquote>