>  기사  >  백엔드 개발  >  Python에서 효율적인 양방향 해시 테이블을 구현하는 방법은 무엇입니까?

Python에서 효율적인 양방향 해시 테이블을 구현하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-27 20:57:02989검색

How to Implement an Efficient Bidirectional Hash Table in Python?

효율적인 양방향 해시 테이블 구현

양방향 해시 테이블은 키 대 값 조회와 값 대 키 조회를 모두 허용합니다. Python의 내장 dict 데이터 구조는 키-값 조회에 탁월하지만 효율적인 값-키 검색을 제공하지 않습니다.

양방향 해시 테이블을 구현하는 효과적인 방법은 클래스를 활용하는 것입니다. 이는 표준 사전을 확장합니다. biddict라는 이 클래스는 일반 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)는 해당 값을 가진 키 목록에 값을 매핑하는 사전입니다.
  • 역 디렉터리는 입찰 시 자동으로 업데이트됩니다. 수정되었습니다.
  • 일부 입찰 구현과 달리 이 클래스는 여러 키가 동일한 값을 가질 수 있도록 허용합니다.

사용 예:

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.