2017-10-09 72 views
0

我知道字典使用哈希來表示鍵。 假設我有一本字典定義爲如何通過字典中的「密鑰的哈希值」來訪問值?

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

我能得到打招呼這樣

dict.get(1.1) 

我想要做的就是在「你好」通過按鍵的哈希值,像

dict.get(hash(1.1)) 

是這樣的嗎?我怎樣才能做到這一點?我想檢查散列值是否由python計算?如果它實際上是生成的,比我可以直接去那個地址並得到'hello'的值,對吧?

+4

您的前提是有缺陷的,因爲您無法保證在給定密鑰的散列值的情況下找到單個值。可能存在衝突,因此單個密鑰可能有多個值,此時您必須在該存儲桶中執行輔助查找。因此,您必須按鍵搜索,因爲這是找到唯一對應值的唯一方法。 [見這裏](https://stackoverflow.com/questions/9010222/how-can-python-dict-have-multiple-keys-with-same-hash) – CoryKramer

+0

一個散列值可能與多個對象有關。你假設哈希總是映射一對一。 –

+0

@CoryKramer沒關係,我可以將所有對象映射到我創建的字典中的哈希值嗎?我不想要一個唯一的值,我只想看到所有映射到該散列的對象? –

回答

0

當字典存儲一個值時,它不保證一對一地存儲它。這就是爲什麼訪問和存儲到字典中的原因是最壞情況下的時間複雜度 - 這意味着當從字典存儲或檢索時,我們可能會將值指向相同的散列n次(輸入的長度)。因此每個檢索/存儲都可能要求我們在得到我們需要的之前通過每一個其他值(與從數組中的最後一個位置獲得項目並且我們開始在第一個位置開始搜索時相同)。

因此,您無法準確檢索「hello」。還有類似的:

dict.get(hash(1.1)) 

會得到散列1.1的索引,這與索引1.1完全不同。

+0

那麼在這種情況下,如果我調用搜索與該哈希關聯的對象,我可以獲取我的字典中的所有對象嗎?在我的情況下,如果我搜索與該散列關聯的值,我可以得到'hello'和'bye'兩種情況(最壞的情況)? –

+0

我知道python查找散列值,如果它得到的衝突比它執行另一個散列檢查級別,我想要的只是返回第一個散列檢查的值,即使我的字典中的所有元素都映射到該散列值? –

+0

如果您創建了自己的哈希映射數據結構,那麼您可以做的非常多。如果這是他們可能打算讓你做的任務。但是使用內置的字典 - 我不完全確定它是否可行。 – Rrr

相關問題