>  기사  >  백엔드 개발  >  Python의 양방향 해시 테이블은 어떻게 효율적인 키 및 값 기반 인덱싱을 가능하게 합니까?

Python의 양방향 해시 테이블은 어떻게 효율적인 키 및 값 기반 인덱싱을 가능하게 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-31 00:46:30296검색

How can a bidirectional hash table in Python enable efficient key- and value-based indexing?

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

해시 테이블 또는 사전 데이터 구조는 키별로 효율적인 인덱싱 및 값 검색을 제공합니다. 그러나 때로는 값으로 색인을 생성하는 것이 바람직할 때도 있습니다. 양방향 해시 테이블은 키 기반 및 값 기반 인덱싱을 모두 허용합니다.

양방향 클래스를 사용한 사용자 정의 구현

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>

주요 기능:

  • inverse 속성 값에서 키 목록으로의 매핑을 유지합니다.
  • 키-값 쌍이 추가되면 역 매핑이 자동으로 업데이트됩니다.
  • 키가 삭제되면 역 매핑도 업데이트됩니다. 키를 제거하도록 업데이트되었습니다.
  • 양방향 특성으로 인해 d[키] 및 d[값] 액세스가 모두 허용됩니다.
  • 여러 키가 동일한 값을 가질 수 있습니다.

사용 예:

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

장점:

이 구현은 Python의 dict 데이터 구조의 효율성과 다음의 유연성을 결합합니다. 양방향 액세스. 값 기반 인덱싱이 필요한 다양한 애플리케이션을 위한 강력한 도구입니다.

위 내용은 Python의 양방향 해시 테이블은 어떻게 효율적인 키 및 값 기반 인덱싱을 가능하게 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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