Python 딕셔너리 기본값 처리 3가지 방법
문제 상황
외부 API 응답을 파싱하는 코드에서 KeyError가 자주 발생했다. API 문서에는 있지만 실제로는 optional인 필드들이 많았고, 매번 try-except로 감싸기엔 코드가 지저분해졌다.
data = api_response.json()
user_name = data['user']['name'] # KeyError 발생 가능
해결 방법
1. get() 메서드
가장 기본적인 방법. 단순 조회에 적합했다.
user_name = data.get('user', {}).get('name', 'Unknown')
age = data.get('age', 0)
2. setdefault()
값이 없을 때 기본값을 설정하고 반환한다. 딕셔너리를 수정해야 할 때 유용했다.
user_data = {}
user_data.setdefault('visits', 0)
user_data['visits'] += 1
3. collections.defaultdict
여러 키에 대해 같은 타입의 기본값이 필요할 때 사용했다.
from collections import defaultdict
counter = defaultdict(int)
for item in items:
counter[item] += 1 # KeyError 없이 동작
groups = defaultdict(list)
for user in users:
groups[user['department']].append(user)
선택 기준
- 단순 조회: get() 사용
- 한두 개 키 초기화: setdefault()
- 반복적인 기본값 패턴: defaultdict
API 파싱 코드는 get()으로, 통계 집계 로직은 defaultdict로 리팩토링했다. KeyError는 거의 사라졌고 코드도 간결해졌다.