實現高效的雙向雜湊表
雜湊表或字典資料結構提供高效的索引和透過鍵檢索值。然而,有時也需要按值進行索引。雙向雜湊表允許基於鍵和基於值的索引。
使用雙向類別的自訂實作
Python dict 實作提供鍵的單向對應到價值觀。要建立雙向雜湊表,我們可以創建自己的類,該類繼承自dict 類:
<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 # Two keys have the same value print(bd) # {'a': 1, 'c': 1, 'b': 2} print(bd.inverse) # {1: ['a', 'c'], 2: ['b']}</code>
逆屬性:
逆屬性維護從值到鍵列表的對應。
加入鍵值對時,逆映射會自動更新。 刪除鍵時,反向映射也會自動更新更新以刪除金鑰。 雙向性質允許 d[key] 和 d[value] 存取。 它允許多個金鑰具有相同的值。 範例用法:優點:此實作結合了Pytation dict效率和靈活性雙向存取。對於需要基於值的索引的各種應用程式來說,它是一個強大的工具。以上是Python 中的雙向雜湊表如何實現高效的基於鍵和值的索引?的詳細內容。更多資訊請關注PHP中文網其他相關文章!