如何通过字典中的“密钥的哈希值”来访问值?

问题描述:

我知道字典使用哈希来表示键。 假设我有一本字典定义为如何通过字典中的“密钥的哈希值”来访问值?

dict = { 1.1 : 'hello', 2 : 'bye' } 

我能得到打招呼这样

dict.get(1.1) 

我想要做的就是在“你好”通过按键的哈希值,像

dict.get(hash(1.1)) 

是这样的吗?我怎样才能做到这一点?我想检查散列值是否由python计算?如果它实际上是生成的,比我可以直接去那个地址并得到'hello'的值,对吧?

+4

您的前提是有缺陷的,因为您无法保证在给定密钥的散列值的情况下找到单个值。可能存在冲突,因此单个密钥可能有多个值,此时您必须在该存储桶中执行辅助查找。因此,您必须按键搜索,因为这是找到唯一对应值的唯一方法。 [见这里](https://*.com/questions/9010222/how-can-python-dict-have-multiple-keys-with-same-hash) – CoryKramer

+0

一个散列值可能与多个对象有关。你假设哈希总是映射一对一。 –

+0

@CoryKramer没关系,我可以将所有对象映射到我创建的字典中的哈希值吗?我不想要一个唯一的值,我只想看到所有映射到该散列的对象? –

当字典存储一个值时,它不保证一对一地存储它。这就是为什么访问和存储到字典中的原因是最坏情况下的时间复杂度 - 这意味着当从字典存储或检索时,我们可能会将值指向相同的散列n次(输入的长度)。因此每个检索/存储都可能要求我们在得到我们需要的之前通过每一个其他值(与从数组中的最后一个位置获得项目并且我们开始在第一个位置开始搜索时相同)。

因此,您无法准确检索“hello”。还有类似的:

dict.get(hash(1.1)) 

会得到散列1.1的索引,这与索引1.1完全不同。

+0

那么在这种情况下,如果我调用搜索与该哈希关联的对象,我可以获取我的字典中的所有对象吗?在我的情况下,如果我搜索与该散列关联的值,我可以得到'hello'和'bye'两种情况(最坏的情况)? –

+0

我知道python查找散列值,如果它得到的冲突比它执行另一个散列检查级别,我想要的只是返回第一个散列检查的值,即使我的字典中的所有元素都映射到该散列值? –

+0

如果您创建了自己的哈希映射数据结构,那么您可以做的非常多。如果这是他们可能打算让你做的任务。但是使用内置的字典 - 我不完全确定它是否可行。 – Rrr