Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Melaksanakan Jadual Hash Dua Arah yang Cekap dalam Python?

Bagaimana untuk Melaksanakan Jadual Hash Dua Arah yang Cekap dalam Python?

Patricia Arquette
Patricia Arquetteasal
2024-10-27 20:57:021110semak imbas

How to Implement an Efficient Bidirectional Hash Table in Python?

Melaksanakan Jadual Cincang Dwi Arah yang Cekap

Jadual cincang dwiarah membenarkan pencarian kunci-ke-nilai dan nilai-ke-kunci. Walaupun struktur data dict terbina dalam Python cemerlang dalam carian kunci-ke-nilai, ia tidak menawarkan perolehan semula nilai-ke-kunci yang cekap.

Kaedah yang berkesan untuk melaksanakan jadual cincang dua arah ialah menggunakan kelas yang memanjangkan dict standard. Kelas ini, bernama bidict, mengekalkan direktori songsang yang dikemas kini secara automatik dengan sebarang pengubahsuaian pada dict biasa.

Pelaksanaan Kod:

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

Ciri Utama :

  • Direktori songsang (bd.inverse) ialah kamus yang memetakan nilai kepada senarai kunci dengan nilai tersebut.
  • Direktori songsang dikemas kini secara automatik apabila bidict diubah suai.
  • Tidak seperti beberapa pelaksanaan bidict, kelas ini membenarkan berbilang kunci mempunyai nilai yang sama.

Contoh Penggunaan:

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

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Jadual Hash Dua Arah yang Cekap dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn