簡體   English   中英

如何檢查元組鍵是否在 O(1) 時間的字典中?

[英]How to check if a tuple key is in a dict with O(1) time?

我正在嘗試在 Python 中實現 hash 表/哈希 map。

假設我使用元組作為這樣的鍵:

hashTable = {}
node = [1, 2, 3]

print(hashTable[tuple(node)]) # throws an error
hashTable[tuple(node)] = True
print(hashTable[tuple(node)]) # prints TRUE

我想在添加之前檢查 hashTable 中是否存在元素。 我嘗試使用所有False值初始化字典。

hashTable = {}
for i in range(1000):
    hashTable[i] = False

因此,這將創建一個大小為 1000 的 hash 表,其中每個插槽都設置為 FALSE。 但是,如果我嘗試檢查哈希表中是否存在不存在的元素:

print(hashTable[tuple(node)])

我得到和以前一樣的錯誤。

一個 go 如何做到這一點? 我認為這可以通過in迭代 dict ,但這不會首先破壞使用 hash 表的全部目的嗎?

訪問密鑰與檢查密鑰是否存在類似,但不一定相同。 要檢查某個鍵是否在字典中,請通過in運算符使用dict.__contains__ 要檢查它是否丟失,請使用not in運算符:

key = tuple(node)
if key not in hashTable:
    hashTable[key] = value

話雖如此,檢查收容的一種完全有效的方法是嘗試訪問:

key = tuple(node)
try:
    # attempt to use hashTable[key]
except KeyError:
    # Do something with missing key

當需要兩條路徑時這樣做的好處是您只需要訪問字典一次而不是兩次。

盡量避免一遍又一遍地調用tuple(node) :它不是免費的。 如果可以,將node生成為tuple ,這樣做。 如果不是,請執行一次轉換並使用轉換后的值。

您可以使用in運算符來確定字典中的成員資格:

例如

if tuple(node) in hashTable:
     x = hashTable[tuple(node)]
     ...

您可以嘗試獲取密鑰,如果它不在 de 字典中,則返回一個默認值,可能是None

x = hashTable.get(node, default=None)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM