>  기사  >  백엔드 개발  >  키 순서를 유지하고 기본값을 할당하기 위해 Python에서 순서가 지정된 defaultdict를 어떻게 구현합니까?

키 순서를 유지하고 기본값을 할당하기 위해 Python에서 순서가 지정된 defaultdict를 어떻게 구현합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-28 09:33:02507검색

How do you implement an ordered defaultdict in Python to maintain key order and assign default values?

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

Python 컬렉션 모듈의 OrderedDict() 및 defaultdict() 기능을 다음과 같이 병합할 수 있습니다. 순서가 지정된 기본 사전을 만듭니다. 이 조합을 사용하면 존재하지 않는 키에 액세스할 때 키가 정렬되고 기본값이 할당되는 사전을 유지할 수 있습니다.

이를 달성하기 위해 Stack Overflow 커뮤니티에서 제공되는 수정된 버전의 레시피를 활용할 수 있습니다. 코드는 다음과 같습니다.

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

class DefaultOrderedDict(OrderedDict):
    # Source: http://stackoverflow.com/a/6190500/562769
    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

    # Override necessary methods for pickling
    def __reduce__(self):
        if self.default_factory is None:
            args = tuple()
        else:
            args = self.default_factory,
        return type(self), args, None, None, self.items()

    def copy(self):
        return self.__copy__()

    def __copy__(self):
        return type(self)(self.default_factory, self)

    def __deepcopy__(self, memo):
        import copy
        return type(self)(self.default_factory,
                          copy.deepcopy(self.items()))

    def __repr__(self):
        return 'OrderedDefaultDict(%s, %s)' % (self.default_factory,
                                               OrderedDict.__repr__(self))</code>

이 코드 조각에는 __init__ 메서드가 포함되어 있어 기본 팩토리 함수를 지정할 수 있습니다. __missing__ 메서드는 키 액세스를 처리하고 팩토리 함수를 사용하여 기본값을 할당합니다. 또한 이 사용자 정의 사전의 적절한 피클링 및 표현을 위해 __reduce__, copy(), __copy__(), __deepcopy__() 및 __repr__()과 같은 다양한 메서드가 정의되어 있습니다.

이 DefaultOrderedDict 클래스를 활용하면 다음을 수행할 수 있습니다. 누락된 키에 대한 기본값을 제공하는 순서가 지정된 사전을 구성합니다. 이 접근 방식은 순서화된 키 관리와 동적 값 할당의 이점을 결합합니다.

위 내용은 키 순서를 유지하고 기본값을 할당하기 위해 Python에서 순서가 지정된 defaultdict를 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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