Python에서 `defaultdict` 이해하기
Daniel Hayes
Full-Stack Engineer · Leapcell

Key Takeaways
defaultdict는 누락된 키를 기본값으로 자동 초기화합니다.- 딕셔너리에서 계산 및 그룹화와 같은 일반적인 작업을 단순화합니다.
- 기본값을 정의하려면 팩터리 함수를 제공해야 합니다.
Python에서 딕셔너리를 사용할 때 개발자가 직면하는 일반적인 문제 중 하나는 누락된 키를 처리하는 것입니다. 표준 딕셔너리(dict)에 존재하지 않는 키에 액세스하면 KeyError가 발생합니다. 여기서 collections.defaultdict가 등장합니다. 존재하지 않는 키에 대한 기본값을 제공하여 딕셔너리 연산을 단순화하는 강력한 대안입니다.
defaultdict란 무엇입니까?
defaultdict는 내장 dict 클래스의 서브클래스입니다. 오류를 발생시키는 대신 누락된 키에 대한 기본값을 반환하기 위해 __missing__이라는 하나의 메서드를 재정의합니다. Python의 collections 모듈의 일부이며 사용하기 전에 가져와야 합니다.
from collections import defaultdict
기본 사용법
defaultdict를 만들려면 팩터리 함수를 제공해야 합니다. 팩터리 함수는 누락된 키에 액세스할 때마다 기본값을 반환하는 호출 가능 객체입니다.
from collections import defaultdict # int를 사용하는 defaultdict는 누락된 키에 대해 0을 반환합니다. counts = defaultdict(int) counts['apple'] += 1 print(counts) # 출력: defaultdict(<class 'int'>, {'apple': 1})
위의 예에서 int()는 0을 반환하므로 'apple'에 대한 첫 번째 액세스는 KeyError를 발생시키지 않습니다. 대신 0으로 초기화한 다음 1을 더합니다.
일반적인 사용 사례
요소 계산
defaultdict(int)는 항목 발생 횟수를 계산하는 데 자주 사용됩니다.
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'] counter = defaultdict(int) for word in words: counter[word] += 1 print(counter) # 출력: defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})
데이터 그룹화
defaultdict(list)는 항목을 목록으로 그룹화하는 데 유용합니다.
from collections import defaultdict students = [ ('Math', 'Alice'), ('Math', 'Bob'), ('English', 'Alice'), ('Science', 'Charlie') ] grouped = defaultdict(list) for subject, name in students: grouped[subject].append(name) print(grouped) # 출력: defaultdict(<class 'list'>, {'Math': ['Alice', 'Bob'], 'English': ['Alice'], 'Science': ['Charlie']})
팩터리 함수
팩터리는 int 또는 list와 같은 내장 함수뿐만 아니라 모든 호출 가능 객체일 수 있습니다. 예를 들어 람다 또는 사용자 정의 함수를 사용할 수 있습니다.
default_str = defaultdict(lambda: 'N/A') print(default_str['unknown']) # 출력: N/A
dict.get() 및 setdefault()와의 비교
dict.get(key, default) 또는 dict.setdefault(key, default)와 같은 메서드는 KeyError를 피할 수 있지만, 기본값을 반복적으로 초기화해야 하는 경우 defaultdict가 더 깔끔하고 효율적입니다.
주의 사항
- 읽기 전용인 경우에도 누락된 키는 액세스되는 즉시 딕셔너리에 추가됩니다.
- 기본 팩터리에 비용이 많이 드는 작업이 포함된 경우 주의해서 사용하거나 지연 초기화를 고려하십시오.
결론
defaultdict는 기본값을 처리할 때 딕셔너리 사용을 단순화하기 위한 Python의 매우 유용한 도구입니다. 계산, 그룹화 또는 단순히 상용구 초기화 코드를 피하든 defaultdict는 코드를 더 깔끔하고 효율적으로 만들 수 있습니다.
더 복잡한 사용 사례 또는 깊이 중첩된 딕셔너리의 경우 defaultdict 자체를 중첩할 수도 있습니다.
tree = defaultdict(lambda: defaultdict(list)) tree['fruits']['red'].append('apple') print(tree)
탐색해 보세요. 그러면 가장 좋아하는 Python 도구 중 하나가 될 수 있습니다.
FAQs
키가 생성되고 팩터리 함수를 사용하여 초기화됩니다.
defaultdict는 기본값을 자동으로 초기화하여 반복적인 코드를 피합니다.
예, defaultdict를 중첩하여 트리 또는 그룹화된 매핑과 같은 구조를 빌드할 수 있습니다.
Leapcell은 Python 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다중 언어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 지불하세요. 요청도 없고, 요금도 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불하세요.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
간편한 확장성 및 고성능
- 고도의 동시성을 쉽게 처리할 수 있도록 자동 확장됩니다.
- 운영 오버헤드가 전혀 없습니다. 빌드에만 집중하세요.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ



