使用键哈希值索引字典

时间:2016-02-05 13:49:29

标签: python dictionary hash

我目前正在努力学习python,我发现自己陷入了这个字典练习:http://learnpythonthehardway.org/book/ex39.html

给我带来问题的是以下代码:

def hash_key(aMap, key):
    """Given a key this will create a number and then convert it to
    an index for the aMap's buckets."""
    return hash(key) % len(aMap)

我如何确定我不会从hash_key函数中获取重复值?由于正在使用modulo,所以什么阻止hash()返回值,以便在对它们使用modulo之后它们返回相同的hash_key。

实施例。 len(aMap)=10hash(key1) = 20hash(key2) = 30因此两个dict键的hash_key为0,即使它们显然不相等。

我很难掌握哈希背后的概念,所以如果你有任何适合我技能水平的阅读材料,请分享。我不怕努力工作。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在链接练习中提出的hashmap 打算生成密钥冲突。

数据结构是列表列表,其中键的哈希模数值确定数据所在的第二级列表。

将结构想象为n桶的数组,每个桶都有自己的key。如果您在此数据结构中添加了某些内容,hash_key()方法会找到相应的存储桶,并将新数据附加到该存储桶的内容中。实际上,存储桶将接收您的数据是随机的,但由于它是一个哈希函数,因此对于相同的密钥,它将始终是相同的存储桶。