Python에서 defaultdict 사용

Zeeshan Afridi 2023년10월8일
  1. Python의 defaultdictdict
  2. Python의 defaultdict
  3. 파이썬에서 defaultdict의 유용한 기능
Python에서 defaultdict 사용

오늘의 기사에서는 defaultdict 컨테이너에 대해 설명하고 코드 예제를 사용하여 사용법을 보여줍니다.

Python의 defaultdictdict

defaultdict는 collections 모듈에 속하는 사전과 같은 컨테이너입니다. 사전의 하위 클래스입니다. 따라서 사전의 모든 기능이 있습니다. 그러나 defaultdict의 유일한 목적은 KeyError를 처리하는 것입니다.

# return true if the defaultdict is a subclass of dict (dictionary)
from collections import defaultdict

print(issubclass(defaultdict, dict))

출력:

True

사용자가 사전에서 항목을 검색했는데 검색된 항목이 존재하지 않는다고 가정해 보겠습니다. 일반 사전에서는 항목이 존재하지 않음을 의미하는 KeyError가 발생합니다. 이 문제를 극복하기 위해 Python 개발자는 defaultdict라는 개념을 제시했습니다.

코드 예:

# normal dictionary
ord_dict = {"x": 3, "y": 4}

ord_dict["z"]  # --> KeyError

출력:

KeyError: 'z'

일반 사전은 알 수 없는 를 처리할 수 없으며 위의 코드에서 설명한 것처럼 알 수 없는 를 검색할 때 KeyError를 발생시킵니다.

반면 defaultdict 모듈은 Python 사전과 유사하게 작동합니다. 그럼에도 불구하고 유용하고 사용자 친화적인 고급 기능이 있으며 사용자가 사전에서 정의되지 않은 키를 검색할 때 오류가 발생하지 않습니다.

그러나 대신 사전에 항목을 만들고 에 대한 기본값을 반환합니다. 이 개념을 이해하기 위해 아래의 실제 부분을 살펴보겠습니다.

코드 예:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "The searched Key Not Present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

# search 'z' in the dictionary 'dic'
print(dic["z"])  # instead of a KeyError, it has returned the default value
print(dic.items())

출력:

The searched Key Not Present
dict_items([('x', 3), ('y', 4), ('z', 'The searched Key Not Present')])

defaultdict는 사전에 정의되지 않은 키로 액세스하려는 모든 항목을 생성합니다.

그리고 이러한 default 항목을 생성하면 defaultdict의 생성자에게 전달하는 함수 객체를 호출하며, 더 정확하게 말하면 객체는 유형 객체와 함수를 포함하는 호출 가능한 객체여야 합니다.

위의 예에서 기본 항목은 사전의 정의되지 않은 키에 대해 문자열 The searched Key Not Present를 반환하는 def_val 함수로 생성됩니다.

Python의 defaultdict

default_factory__missing__() 메서드에서 사용되는 defaultdict 생성자의 첫 번째 인수이며 생성자의 인수가 누락된 경우 default_factoryNone으로 초기화됩니다. KeyError가 발생합니다.

그리고 default_factoryNone 이외의 것으로 초기화되면 위의 예에서 볼 수 있듯이 검색된 keyvalue로 할당됩니다.

파이썬에서 defaultdict의 유용한 기능

dictionarydefaultdict 기능이 많이 있습니다. 아시다시피 defaultdictdictionary의 모든 기능에 액세스할 수 있습니다. 그러나 이들은 defaultdict에 특정한 가장 유용한 기능 중 일부입니다.

Python의 defaultdict.clear()

코드 예:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "Not Present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

print(f'Before clearing the dic, values of x = {dic["x"]} and y = {dic["y"]}')
dic.clear()  # dic.clear() -> None. it will remove all items from dic.
print(f'After clearing the dic, values of x = {dic["x"]} and y = {dic["y"]}')

출력:

Before clearing the dic, values of x = 3 and y = 4
After clearing the dic, values of x = Not Present and y = Not Present

위의 예에서 볼 수 있듯이 사전 dic에는 x=3y=4인 두 쌍의 데이터가 있습니다. 그러나 clear() 함수를 사용한 후 데이터가 제거되고 xy의 값이 더 이상 존재하지 않으므로 xy에 대해 없음이 표시됩니다.

Python의 defaultdict.copy()

코드 예:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "Not Present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

dic_copy = dic.copy()  # dic.copy will give you a shallow copy of dic.

print(f"dic = {dic.items()}")
print(f"dic_copy = {dic_copy.items()}")

출력:

dic = dict_items([('x', 3), ('y', 4)])
dic_copy = dict_items([('x', 3), ('y', 4)])

defaultdict.copy() 함수는 사전의 얕은 복사본을 그에 따라 사용할 수 있는 다른 변수에 복사하는 데 사용됩니다.

Python의 defaultdict.default_factory()

코드 예:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "Not present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

print(f"The value of z = {dic['Z']}")
print(
    dic.default_factory()
)  # default_factory returns the default value for defaultdict.

출력:

The value of z = Not present
Not present

default_factory() 함수는 정의된 클래스의 속성에 기본값을 제공하는 데 사용되며 일반적으로 default_factory의 값은 함수가 반환하는 값입니다.

Python의 defaultdict.get(키, 기본값)

코드 예:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "Not present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

# search the value of Z in the dictionary dic; if it exists, return the value; otherwise, display the message
print(dic.get("Z", "Value doesn't exist"))  # default value is None

출력:

Value doesn't exist

defaultdict.get() 함수는 두 개의 인수를 사용합니다. 첫 번째는 키이고 두 번째는 값이 존재하지 않는 경우 키에 대한 기본값입니다.

그러나 두 번째 인수는 선택 사항입니다. 따라서 어떤 메시지나 값도 지정할 수 있습니다. 그렇지 않으면 없음이 기본값으로 표시됩니다.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn