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

Patricia Arquette
Lepaskan: 2024-10-27 20:57:02
asal
988 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!