순서가 지정된 기본 사전 구현
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!