Python で効率的な双方向ハッシュ テーブルを実装するには?

Patricia Arquette
リリース: 2024-10-27 20:57:02
オリジナル
988 人が閲覧しました

How to Implement an Efficient Bidirectional Hash Table in Python?

効率的な双方向ハッシュ テーブルの実装

双方向ハッシュ テーブルでは、キーから値への検索と値からキーへの検索の両方が可能です。 Python の組み込み dict データ構造は、キーから値への検索には優れていますが、値からキーへの効率的な取得は提供しません。

双方向ハッシュ テーブルを実装する効果的な方法は、クラスを利用することです。これは標準の dict を拡張したものです。 bidict という名前のこのクラスは、通常の 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>
ログイン後にコピー

主な機能:

  • 逆ディレクトリ (bd.inverse) は、値をその値を持つキーのリストにマップする辞書です。
  • 逆ディレクトリは、bidict が実行されると自動的に更新されます。が変更されます。
  • 一部の bidict 実装とは異なり、このクラスでは複数のキーが同じ値を持つことができます。

使用例:

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!