> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 순서가 지정된 기본 사전을 만드는 방법은 무엇입니까?

Python에서 순서가 지정된 기본 사전을 만드는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-29 18:28:02
원래의
586명이 탐색했습니다.

How to Create an Ordered Default Dict in Python?

순서가 지정된 기본 사전 구현

Python의 내장 컬렉션 모듈은 OrderedDict와 defaultdict를 모두 제공하며 각각 고유한 기능을 제공합니다. OrderedDict는 해당 요소의 삽입 순서를 유지하는 반면, defaultdict는 지정된 팩토리 함수를 기반으로 누락된 키에 대한 기본값을 자동으로 생성합니다.

두 기능의 결합

두 데이터 구조의 기능을 결합하면 해당 요소의 순서를 유지하고 누락된 키를 기본값으로 초기화하는 순서가 지정된 기본 딕셔너리를 만들 수 있습니다. 이는 OrderedDict 클래스를 확장하여 달성할 수 있습니다.

사용자 정의 클래스: DefaultOrderedDict

다음 사용자 정의 클래스 DefaultOrderedDict는 OrderedDict에서 상속되며 누락된 키를 처리하는 기능을 추가합니다.

<code class="python">from collections import OrderedDict, Callable

class DefaultOrderedDict(OrderedDict):
    def __init__(self, default_factory=None, *a, **kw):
        if (default_factory is not None and not isinstance(default_factory, Callable)):
            raise TypeError('first argument must be callable')
        OrderedDict.__init__(self, *a, **kw)
        self.default_factory = default_factory

    def __getitem__(self, key):
        try:
            return OrderedDict.__getitem__(self, key)
        except KeyError:
            return self.__missing__(key)

    def __missing__(self, key):
        if self.default_factory is None:
            raise KeyError(key)
        self[key] = value = self.default_factory()
        return value</code>
로그인 후 복사

사용법

이 클래스는 일반 OrderedDict와 동일한 방식으로 사용할 수 있습니다:

<code class="python">ordered_default_dict = DefaultOrderedDict(lambda: 0)
ordered_default_dict['key1'] = 1
ordered_default_dict['key2'] = 2</code>
로그인 후 복사

그러나 키가 존재하지 않으면 공장 기능의 기본값이 생성됩니다.

<code class="python">print(ordered_default_dict['missing_key'])  # Output: 0</code>
로그인 후 복사

위 내용은 Python에서 순서가 지정된 기본 사전을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿