✅ 함수 기본 설명
형식: defaultdict({val})
반환 값: defaultdict 객체 (예: defaultdict(<class 'int'>, {'key1': 0})
defaultdict() 함수는 딕셔너리를 만드는 dict 클래스의 서브 클래스로, 기본적으로 일반 딕셔너리와 비슷하게 작동한다. 따라서 딕셔너리에서 제공하는 메소드들을 그대로 사용할 수 있다. 무엇보다 매개변수로 주어진 객체의 기본값을 딕셔너리의 초기값으로 지정할 수 있다는 특징이 있다. 매개변수로는 숫자, 리스트, 셋 등이 들어갈 수 있다.
🍏 예시 코드
from collections import defaultdict
a = defaultdict(int) # a = defaultdict(<class 'int'>, {})
a['key1'] # a = defaultdict(<class 'int'>, {'key1': 0})
a['key2'] = 'hi' # a = defaultdict(<class 'int'>, {'key1': 0, 'key2': 'hi'})
✅ 설명
defaultdict()는 매개변수로 리스트, 셋 등을 넣어 default 값을 빈 리스트나 셋으로 설정할 수 있다.
🍏 예시 코드
# list를 default 값으로
a = defaultdict(list) # a = defaultdict(<class 'list'>, {})
a['key1'] # a = defaultdict(<class 'list'>, {'key1': []})
# set을 default 값으로
a = defaultdict(set) # a = defaultdict(<class 'set'>, {})
a['key1'] # a = defaultdict(<class 'set'>, {'key1': set()})
✅ 설명
일반 딕셔너리와 비교해 보자.
🍏 예시 코드
# 일반 딕셔너리 사용
words = ['hi', 'apple', 'hi', 'banana', 'cat']
dic = {}
# 방법 1 (keyError)
for word in words:
dic[word] += 1
# 방법 2
for word in words:
if word in dic.keys():
dic[word] += 1
else:
dic[word] = 1
⚠️ 위의 '방법 1' 코드는 dic[word]의 key가 없을 때 에러가 발생한다. (존재하지 않는 key에 대해 접근하여 값을 올리고 있기 때문에 keyError가 발생한다.) 따라서 '방법 2'와 같이 작성해야 한다.
# defaultdict 사용
from collections import defaultdict
words = ['hi', 'apple', 'hi', 'banana', 'cat']
dic = defaultdict{int}
for word in words:
dic[word] += 1
defaultdict을 사용할 경우 일반 딕셔너리를 사용할 때의 '방법 1'과 같이 코드를 작성해도 keyError가 발생하지 않는다. 기본적으로 존재하지 않는 key에 대해 접근하는 경우 해당 key에 default 값을 넣은 key-value 쌍의 요소를 넣어주기 때문이다.