[Python] `setdefault`로 안전한 딕셔너리 관리하기: 코드를 간결하게 만드는 꿀팁
setdefault
로 안전한 딕셔너리 관리하기: 코드를 간결하게 만드는 꿀팁
딕셔너리는 Python에서 가장 유용한 자료구조 중 하나입니다. 하지만 데이터를 삽입할 때 키(key)가 이미 있는지 확인하고 값(value)을 추가해야 하는 번거로운 작업이 자주 발생합니다. 이럴 때 setdefault
메서드를 사용하면 코드가 훨씬 간결해지고 안전해집니다.
이번 글에서는 setdefault
의 기본 사용법과 실제 코드에서 딕셔너리를 효율적으로 관리하는 방법을 살펴보겠습니다. 딥러닝 모델 설정이나 데이터 전처리 같은 실제 개발 상황에서 쓸만한 예제를 중심으로 설명합니다.
setdefault
란 무엇일까?
setdefault
는 딕셔너리에서 키를 확인한 후:
- 키가 이미 있다면 해당 키의 값을 반환합니다.
- 키가 없다면 기본값(default value)을 해당 키에 설정한 후 반환합니다.
이 메서드는 키가 존재하지 않을 경우 기본값을 추가하면서도, 중복 삽입을 방지할 수 있어 편리합니다.
기본 문법
dictionary.setdefault(key, default_value)
key
: 딕셔너리에 추가하거나 확인할 키.default_value
: 키가 없을 경우 설정할 기본값 (생략 가능, 기본값은None
).
setdefault
기본 예제: 안전하게 값 삽입하기
먼저 setdefault
의 기본 사용법을 확인해봅시다.
# 딕셔너리 생성
data = {"name": "Alice", "age": 30}
# 키가 이미 있는 경우
print(data.setdefault("name", "Bob")) # Alice
# 키가 없는 경우 기본값 추가
print(data.setdefault("location", "New York")) # New York
# 결과 확인
print(data)
결과
Alice
New York
{'name': 'Alice', 'age': 30, 'location': 'New York'}
설명
name
키는 이미 존재하므로 기존 값Alice
를 반환합니다.location
키는 없었으므로 기본값New York
을 추가하고 반환합니다.- 이처럼
setdefault
를 사용하면 키가 이미 존재하는지 확인하고 조건문을 작성할 필요가 없어 코드가 간결해집니다.
1. 딥러닝 모델 설정에서 setdefault
사용하기
딥러닝 모델을 구성할 때, 여러 하이퍼파라미터와 설정값을 관리해야 합니다. 이때 키가 없으면 기본값을 설정해야 하는 상황에서 setdefault
를 사용하면 코드가 깔끔해집니다.
def configure_model(config):
# 하이퍼파라미터 기본값 설정
config.setdefault("learning_rate", 0.001)
config.setdefault("batch_size", 32)
config.setdefault("optimizer", "adam")
config.setdefault("dropout_rate", 0.5)
# 설정 출력
for key, value in config.items():
print(f"{key}: {value}")
# 사용자 입력값
user_config = {"batch_size": 64}
# 모델 설정
configure_model(user_config)
결과
batch_size: 64
learning_rate: 0.001
optimizer: adam
dropout_rate: 0.5
설명
setdefault
를 사용하여 사용자가 설정하지 않은 키에 기본값을 추가합니다.- 이미 설정된 값은 덮어쓰지 않고 유지되므로 안전하게 기본값을 지정할 수 있습니다.
- 하이퍼파라미터가 많을수록
setdefault
는 조건문을 줄이고 코드 가독성을 높여줍니다.
2. 데이터 전처리에서 setdefault
로 카테고리 분류하기 (카테고리 없는 데이터 포함)
setdefault
는 키가 없을 때 기본값을 설정하기 때문에, 카테고리 없는 데이터도 안전하게 처리할 수 있습니다. 아래 예제는 데이터 항목 중 일부가 category
키를 가지지 않는 경우를 포함해 어떻게 처리할 수 있는지 보여줍니다.
# 데이터 분류 함수
def categorize_data(data):
categories = {}
for item in data:
# 카테고리가 없는 경우 "Uncategorized"로 설정
category = item.get("category", "Uncategorized")
# 카테고리 키가 없으면 빈 리스트로 초기화
categories.setdefault(category, []).append(item["value"])
return categories
# 데이터 예시
data = [
{"category": "A", "value": 10},
{"category": "B", "value": 20},
{"value": 30}, # 카테고리 없음
{"category": "C", "value": 40},
{"value": 50}, # 카테고리 없음
]
# 데이터 분류
result = categorize_data(data)
print(result)
결과
{'A': [10], 'B': [20], 'Uncategorized': [30, 50], 'C': [40]}
설명
- 각 데이터 항목의
category
값을 키로,value
값을 리스트에 추가합니다. - 키가 없으면
setdefault
가 자동으로 빈 리스트를 설정합니다. - 조건문 없이도 효율적이고 안전하게 데이터를 분류할 수 있습니다.
3. 로그 데이터에서 setdefault
로 발생 횟수 기록하기
로그 데이터를 분석할 때, 특정 이벤트의 발생 횟수를 기록하는 작업이 필요할 수 있습니다. 이때 setdefault
를 사용하면 코드가 훨씬 단순해집니다.
def count_events(logs):
event_counts = {}
for event in logs:
# 이벤트 키가 없으면 초기값 0 설정 후 증가
event_counts[event] = event_counts.setdefault(event, 0) + 1
return event_counts
# 로그 데이터 예시
logs = ["login", "view", "click", "login", "click", "click", "logout"]
# 이벤트 발생 횟수 계산
result = count_events(logs)
print(result)
결과
{'login': 2, 'view': 1, 'click': 3, 'logout': 1}
설명
setdefault(event, 0)
는 이벤트 키가 없으면 기본값 0을 추가합니다.- 이후 값을 1씩 증가시켜 이벤트 발생 횟수를 기록합니다.
- 이 방식은 조건문 없이도 중복된 키를 안전하게 처리할 수 있어, 코드가 간결하고 효율적입니다.
4. 중첩 딕셔너리 관리에서 setdefault
활용하기
중첩된 데이터를 관리할 때도 setdefault
는 매우 유용합니다. 예를 들어, 특정 키와 하위 키를 가지는 딕셔너리를 관리할 때 중복 체크 없이 쉽게 값 추가가 가능합니다.
# 데이터 삽입 함수
def add_to_nested_dict(data, key1, key2, value):
data.setdefault(key1, {}).setdefault(key2, []).append(value)
# 초기 딕셔너리
nested_data = {}
# 데이터 추가
add_to_nested_dict(nested_data, "user1", "actions", "login")
add_to_nested_dict(nested_data, "user1", "actions", "click")
add_to_nested_dict(nested_data, "user2", "actions", "view")
# 결과 확인
print(nested_data)
결과
{'user1': {'actions': ['login', 'click']}, 'user2': {'actions': ['view']}}
설명
- 첫 번째
setdefault(key1, {})
는 최상위 키가 없으면 빈 딕셔너리를 추가합니다. - 두 번째
setdefault(key2, [])
는 하위 키가 없으면 빈 리스트를 추가합니다. - 이렇게 중첩된 딕셔너리를 처리할 때, 조건문 없이도 안전하고 효율적으로 값을 추가할 수 있습니다.
요약: 왜 setdefault
를 써야 할까?
setdefault
는 Python 딕셔너리를 다룰 때 키가 존재하는지 확인하는 반복적인 조건문을 줄여주며, 값을 안전하게 추가할 수 있는 강력한 도구입니다. 특히 다음 상황에서 유용합니다:
- 딕셔너리에 기본값을 설정하면서 값을 추가해야 할 때.
- 데이터 분류, 그룹화, 또는 발생 횟수 집계가 필요할 때.
- 중첩된 딕셔너리를 처리할 때.
setdefault
를 활용하면 조건문으로 키를 확인하는 번거로움을 덜고, 더 간결하고 읽기 쉬운 코드를 작성할 수 있습니다. 이제 딕셔너리 작업에서 setdefault
를 활용해보세요!