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