繁体   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