Python 如何通过“访问”访问值;密钥的哈希值";在字典里?

Python 如何通过“访问”访问值;密钥的哈希值";在字典里?,python,dictionary,hash,Python,Dictionary,Hash,我了解到字典使用散列作为键。 假设我有一本定义为 dict = { 1.1 : 'hello', 2 : 'bye' } 我可以这样打招呼 dict.get(1.1) 我想做的是通过密钥的散列值获取“hello”,类似于 dict.get(hash(1.1)) 像这样的?我该怎么做?我想检查哈希值是否由python计算?如果它是实际生成的,那么我可以直接到该地址获取“hello”的值,对吗?当字典存储一个值时,不能保证一对一地存储它。这就是为什么访问和存储到字典是O(n)最坏情况下的时间复

我了解到字典使用散列作为键。 假设我有一本定义为

dict = { 1.1 : 'hello', 2 : 'bye' }
我可以这样打招呼

dict.get(1.1)
我想做的是通过密钥的散列值获取“hello”,类似于

dict.get(hash(1.1))

像这样的?我该怎么做?我想检查哈希值是否由python计算?如果它是实际生成的,那么我可以直接到该地址获取“hello”的值,对吗?

当字典存储一个值时,不能保证一对一地存储它。这就是为什么访问和存储到字典是O(n)最坏情况下的时间复杂度——这意味着在存储或从字典中检索时,我们可能会将值指向相同的哈希n倍(输入的长度)

因此,每次检索/存储都可能要求我们在获取所需内容之前传递所有其他值(与从数组中的最后一个位置获取项目并从第一个位置开始搜索时相同)

因此,您无法确切地检索“hello”。还有一些类似:

dict.get(hash(1.1))

将得到哈希1.1的索引,这与1.1的索引完全不同。

当字典存储一个值时,不能保证一对一地存储它。这就是为什么访问和存储到字典是O(n)最坏情况下的时间复杂度——这意味着在存储或从字典中检索时,我们可能会将值指向相同的哈希n倍(输入的长度)

因此,每次检索/存储都可能要求我们在获取所需内容之前传递所有其他值(与从数组中的最后一个位置获取项目并从第一个位置开始搜索时相同)

因此,您无法确切地检索“hello”。还有一些类似:

dict.get(hash(1.1))

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

您的前提是有缺陷的,因为给定一个键的散列,您不能保证找到单个值。可能存在冲突,因此单个键可能有多个值,此时您必须在该bucket中进行二次查找。因此,必须按键搜索,因为这是找到唯一对应值的唯一方法。一个哈希值可以与多个对象相关。你假设散列总是一对一地映射。@CoryKramer没关系,我能在我创建的字典中得到映射到该散列值的所有对象吗?我不想要唯一的值,我只想看到映射到该散列的所有对象?@JamesJordanTaylor我们在这里讨论的是Python。您的前提是有缺陷的,因为给定一个键的散列,您不能保证找到单个值。可能存在冲突,因此单个键可能有多个值,此时您必须在该bucket中进行二次查找。因此,必须按键搜索,因为这是找到唯一对应值的唯一方法。一个哈希值可以与多个对象相关。你假设散列总是一对一地映射。@CoryKramer没关系,我能在我创建的字典中得到映射到该散列值的所有对象吗?我不想要唯一的值,我只想查看映射到该散列的所有对象?@JamesJordanTaylor我们在这里讨论的是Python。那么,如果我调用搜索与该散列关联的对象,我可以获取字典中的所有对象吗?在我的情况下,如果我搜索与该散列相关联的值,我能同时得到“hello”和“bye”吗(最坏的情况)?我知道python会查找散列值,如果它在执行另一级散列检查时发生冲突,我只想返回第一次散列检查的值,即使我的字典中的所有元素都映射到该散列值,如果您创建自己的散列映射数据结构,也可以做到这一点。如果这是一项任务,他们可能会让你去做。但是使用内置的字典-我不完全确定这是否可能。那么,如果我调用与该哈希相关联的对象搜索,我可以获取字典中的所有对象吗?在我的情况下,如果我搜索与该散列相关联的值,我能同时得到“hello”和“bye”吗(最坏的情况)?我知道python会查找散列值,如果它在执行另一级散列检查时发生冲突,我只想返回第一次散列检查的值,即使我的字典中的所有元素都映射到该散列值,如果您创建自己的散列映射数据结构,也可以做到这一点。如果这是一项任务,他们可能会让你去做。但是使用内置的词典——我不完全确定这是否可能。