Python 딕셔너리 기본값 처리 패턴 정리
배경
외부 API 응답을 파싱하는 코드를 작성하다가 선택적 필드 처리 때문에 try-except 블록이 과도하게 많아졌다. 딕셔너리 기본값 처리 방법을 정리해둔다.
방법 비교
1. get() 메서드
가장 간단한 방법. 키가 없을 때 None 또는 지정한 기본값을 반환한다.
user_data = response.json()
age = user_data.get('age', 0)
email = user_data.get('email') # None 반환
읽기 전용으로 사용할 때 적합하다.
2. setdefault()
키가 없으면 기본값을 설정하고 반환한다. 원본 딕셔너리를 수정한다는 점이 get()과 다르다.
config = {}
config.setdefault('timeout', 30) # config에 'timeout': 30 추가됨
config.setdefault('timeout', 60) # 이미 있으므로 30 반환
설정 값을 누적할 때 유용했다.
3. collections.defaultdict
키 접근 시 자동으로 기본값을 생성한다. 카운팅이나 그룹핑 작업에 효과적이다.
from collections import defaultdict
# 단어 빈도 카운팅
word_count = defaultdict(int)
for word in words:
word_count[word] += 1 # KeyError 걱정 없음
# 그룹핑
user_by_age = defaultdict(list)
for user in users:
user_by_age[user['age']].append(user)
선택 기준
- 단순 조회:
get() - 조회 + 저장:
setdefault() - 반복적 집계/그룹핑:
defaultdict
로그 집계 스크립트에서 defaultdict로 바꾸니 코드가 30줄 정도 줄어들었다. 상황에 맞는 도구를 쓰는 게 중요하다.