기본 dict 은 존재하지 않는 key를 조회하면 에러가 발생한다. 따라서 코드 작성 시 key의 존재 여부를 고려해야하는 불편함이 있다. 하지만 defaultdict()을 사용하면 이런 불편함을 해소할 수 있다. key를 조회했을 때 없다면 기본값으로 0, ""(빈 문자열), [] 등을 사용할 수 있다.
words = ["apple", "banana", "apple", "orange", "banana"]
counter = {}
for word in words:
if word in counter:
counter[word] += 1
else:
counter[word] = 1
print(counter) # Output: {'apple': 2, 'banana': 2, 'orange': 1}
from collections import defaultdict
words = ["apple", "banana", "apple", "orange", "banana"]
counter = defaultdict(int)
for word in words:
counter[word] += 1
print(counter) # Output: defaultdict(<class 'int'>, {'apple': 2, 'banana': 2, 'orange': 1})
from collections import defaultdict
# 1. 기본값이 0인 defaultdict
counter = defaultdict(int)
counter['a'] += 1 # 키 'a'가 없으면 기본값 0 생성 후 1 더함
print(counter) # Output: defaultdict(<class 'int'>, {'a': 1})
# 2. 기본값이 빈 리스트인 defaultdict
grouping = defaultdict(list)
grouping['a'].append(1) # 키 'a'에 값 추가
grouping['a'].append(2)
print(grouping) # Output: defaultdict(<class 'list'>, {'a': [1, 2]})
# 3. 기본값이 빈 문자열인 defaultdict
string_default = defaultdict(str)
print(string_default) # Output: defaultdict(<class 'str'>, {})
print(string_default['missing']) # 키가 없으면 기본값 "" 생성
# Output: ""
# 4. 사용자 정의 함수로 기본값 설정
def default_value():
return 42
custom_default = defaultdict(default_value)
print(custom_default) # Output: defaultdict(<function default_value at ...>, {})
print(custom_default['missing']) # 키가 없으면 기본값 42 생성
# Output: 42
# 5. lambda로 기본값 설정
default_lambda = defaultdict(lambda: "default")
print(default_lambda) # Output: defaultdict(<function <lambda> at ...>, {})
print(default_lambda['unknown']) # 키가 없으면 기본값 "default" 생성
# Output: defaultdict(<function <lambda> at ...>, {'unknown': 'default'})
# 6. 단어 개수 세기
words = ["apple", "banana", "apple", "orange", "banana", "banana"]
word_count = defaultdict(int)
for word in words:
word_count[word] += 1
print(word_count)
# Output: defaultdict(<class 'int'>, {'apple': 2, 'banana': 3, 'orange': 1})