logo

Python의 Defaultdict

사전은 지도와 같은 데이터 값을 저장하는 데 사용되는 Python의 정렬되지 않은 데이터 값 모음입니다. 사전은 다른 데이터 유형처럼 단일 값을 요소로 보유하는 대신 키-값 쌍을 보유합니다. 사전에 구현된 키는 고유하고 변경할 수 없어야 합니다. 즉, Python 튜플은 키가 될 수 있지만 Python 목록은 사전의 키가 될 수 없습니다. 중괄호 {} 안에 일련의 요소를 배치하여 사전을 만들 수 있습니다. 쉼표 ','는 값을 구분할 수 있습니다.

예시 1:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 1: ', Dict_1[1]) print ('key pair 3: ', Dict_1[3]) 

산출:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} key pair 1: A key pair 3: C 

하지만 다섯 번째 키 값을 인쇄하려고 하면 오류가 발생합니다. 'Dict_1' 5번째 키 값이 포함되어 있지 않습니다.

예 2:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 5: ', Dict_1[5]) 

산출:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} --------------------------------------------------------------------------- KeyError Traceback (most recent call last) in 2 print ('Dictionary: ') 3 print (Dict_1) ----> 4 print ('key pair 5: ', Dict_1[5]) KeyError: 5 

언제든지 키 오류 문제가 발생하면 사용자에게 문제가 될 수 있습니다. 우리는 Python의 또 다른 사전을 사용하여 이 오류를 극복할 수 있습니다. 불이행 . 사용자는 이 사전을 내부에서 찾을 수 있습니다. '컬렉션' 기준 치수.

불이행

defaultdict는 Python 사전으로, 'collections' 모듈 내부에 있는 컨테이너와 같습니다. 사전형 객체를 반환하는 데 사용되는 사전 클래스의 하위 클래스입니다. defaultdict와 Dictionary는 모두 동일한 기능을 가지고 있습니다. 단, defaultdict는 사용자가 만든 사전에 존재하지 않는 Key에 대한 기본값을 제공하므로 KeyError를 발생시키지 않습니다.

통사론:

 defaultdict(default_factory) 

매개변수:

    default_factory:default_factory() 함수는 사용자가 정의한 사전에 대해 사용자가 설정한 기본값을 반환합니다. 이 인수가 없으면 사전은 KeyError를 발생시킵니다.

예:

 from collections import defaultdict as DD # Function for returning a default values for the # keys which are not present in the dictionary def default_value(): return 'This key is not present' # Now, we will define the dict dict_1 = DD(default_value) dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key pair 1: ', dict_1['ABC']) print ('key pair 3: ', dict_1['GHI']) print ('key pair 5: ', dict_1['MNO']) 

산출:

파이썬 초기화 목록
 Dictionary: defaultdict(, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4}) key pair 1: 1 key pair 3: 3 key pair 5: This key is not present 

defaultdict의 내부 작업

defaultdict를 사용하면 표준 사전 작업 외에도 쓰기 가능한 추가 인스턴스 변수와 하나의 메서드를 얻게 됩니다. 쓰기 가능한 인스턴스 변수는 default_factory 매개변수이며 __없어진__ 방법입니다.

    default_factory:default_factory() 함수는 사용자가 정의한 사전에 대해 사용자가 설정한 기본값을 반환합니다.

예:

 from collections import defaultdict as DD dict_1 = DD(lambda: 'This key is not present') dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key value 1: ', dict_1['ABC']) print ('key value 3: ', dict_1['GHI']) print ('key value 5: ', dict_1['MNO']) 

산출:

 Dictionary: defaultdict(<function at 0x0000019efc4b58b0>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: 1 key value 3: 3 key value 5: This key is not present </function>
    __없어진__():__missing__() 함수는 사전에 기본값을 제공하는 데 사용됩니다. __missing__() 함수는 default_factory를 인수로 사용하고, 인수가 None으로 설정되면 KeyError가 발생합니다. 그렇지 않으면 주어진 키에 대한 기본값을 제공합니다. 이 메소드는 본질적으로 __getitem__() 요청한 키를 찾을 수 없을 때 dict 클래스의 함수입니다. __getitem__() 함수는 __missing__() 함수에 있는 값을 올리거나 반환합니다.

예:

 from collections import defaultdict as DD dict_1 = DD(lambda: &apos;This key is not present&apos;) dict_1[&apos;ABC&apos;] = 1 dict_1[&apos;DEF&apos;] = 2 dict_1[&apos;GHI&apos;] = 3 dict_1[&apos;JKL&apos;] = 4 print (&apos;Dictionary: &apos;) print (dict_1) print (&apos;key value 1: &apos;, dict_1.__missing__(&apos;ABC&apos;)) print (&apos;key value 4: &apos;, dict_1[&apos;JKL&apos;]) print (&apos;key value 5: &apos;, dict_1.__missing__(&apos;MNO&apos;)) 

산출:

 Dictionary: defaultdict(<function at 0x0000019efc4b5670>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: This key is not present key value 4: 4 key value 5: This key is not present </function>

default_factory로 '목록'을 사용하는 방법

목록 클래스를 default_factory 인수로 전달할 수 있으며 목록 형식으로 설정된 값으로 defaultdict를 생성합니다.

예:

 from collections import defaultdict as DD # Defining a dictionary dict_1 = DD(list) for k in range(7, 12): dict_1[k].append(k) print (&apos;Dictionary with values as list:&apos;) print (dict_1) 

산출:

 Dictionary with values as list: defaultdict(, {7: [7], 8: [8], 9: [9], 10: [10], 11: [11]}) 

default_factory로 'int'를 사용하는 방법

int 클래스를 default_factory 인수로 전달할 수 있으며 기본값이 0으로 설정된 defaultdict를 생성합니다.

예:

 from collections import defaultdict as DD # Defining the dict dict_1 = DD(int) J = [1, 2, 3, 4, 2, 4, 1, 2] # Now, we will iterate through the list &apos;J&apos; # for keeping the count for k in J: # As, The default value is 0 # so we do not need to # enter the key first dict_1[k] += 1 print(dict_1) 

산출:

 defaultdict(, {1: 2, 2: 3, 3: 1, 4: 2}) 

결론

이 튜토리얼에서는 Python의 defaultdict와 default_factory 매개변수를 사용하여 defaultdict에서 다양한 작업을 수행하는 방법에 대해 논의했습니다.

공장 디자인 패턴