实现高效的双向哈希表
双向哈希表允许键到值和值到键的查找。虽然 Python 的内置 dict 数据结构在键到值查找方面表现出色,但它无法提供高效的值到键检索。
实现双向哈希表的有效方法是利用类扩展了标准字典。此类名为 bidict,维护一个逆目录,该目录会根据对常规字典的任何修改自动更新。
代码实现:
<code class="python">class bidict(dict): def __init__(self, *args, **kwargs): super(bidict, self).__init__(*args, **kwargs) self.inverse = {} for key, value in self.items(): self.inverse.setdefault(value, []).append(key) def __setitem__(self, key, value): if key in self: self.inverse[self[key]].remove(key) super(bidict, self).__setitem__(key, value) self.inverse.setdefault(value, []).append(key) def __delitem__(self, key): self.inverse.setdefault(self[key], []).remove(key) if self[key] in self.inverse and not self.inverse[self[key]]: del self.inverse[self[key]] super(bidict, self).__delitem__(key)</code>
主要功能:
使用示例:
<code class="python">bd = bidict({'a': 1, 'b': 2}) print(bd) # {'a': 1, 'b': 2} print(bd.inverse) # {1: ['a'], 2: ['b']} bd['c'] = 1 # Now two keys have the same value (= 1) print(bd) # {'a': 1, 'c': 1, 'b': 2} print(bd.inverse) # {1: ['a', 'c'], 2: ['b']} del bd['c'] print(bd) # {'a': 1, 'b': 2} print(bd.inverse) # {1: ['a'], 2: ['b']} del bd['a'] print(bd) # {'b': 2} print(bd.inverse) # {2: ['b']} bd['b'] = 3 print(bd) # {'b': 3} print(bd.inverse) # {2: [], 3: ['b']}</code>
以上是如何用Python实现高效的双向哈希表?的详细内容。更多信息请关注PHP中文网其他相关文章!