Language/Python

setdefault vs defaultdict

Linuxias 2024. 11. 30. 16:13
반응형

Python에서 setdefault()defaultdict() 활용하기

Python에서 딕셔너리를 사용할 때 키가 이미 존재하거나 존재하지 않을 때의 동작을 처리하는 방법은 중요합니다. 이 글에서는 setdefault()defaultdict()를 활용해 효율적으로 딕셔너리를 다루는 방법을 알아보고, 코드 예제를 통해 차이점과 사용 사례를 설명하겠습니다.

setdefault()란?

dict.setdefault()는 딕셔너리에서 키를 조회할 때, 해당 키가 없으면 지정된 기본값을 추가하고 반환하는 메서드입니다. 키가 이미 존재하면 기존 값을 반환합니다.

문법

dict.setdefault(key, default=None)
  • key: 조회할 키
  • default: 키가 없을 경우 삽입할 기본값 (기본값은 None)

사용 예제

# 예제: 학생 점수 관리
scores = {"Alice": 90, "Bob": 85}

# 기존 키 조회
print(scores.setdefault("Alice", 100))  # 출력: 90

# 없는 키 추가
print(scores.setdefault("Charlie", 75))  # 출력: 75
print(scores)  # 출력: {'Alice': 90, 'Bob': 85, 'Charlie': 75}
  • 장점: 키가 없는 경우 동시 삽입 및 조회가 가능합니다.
  • 주의점: 키가 없으면 기본값이 항상 추가됩니다.

defaultdict()란?

collections.defaultdict는 딕셔너리를 생성할 때, 기본값을 반환하는 함수를 지정하여 키가 없을 경우 자동으로 기본값을 생성해주는 클래스입니다.

문법

from collections import defaultdict
defaultdict(default_factory)
  • default_factory: 기본값을 생성하는 함수 (예: int, list, set 등)

사용 예제

from collections import defaultdict

# 기본값이 리스트인 defaultdict 생성
grouped_items = defaultdict(list)

# 값 추가
grouped_items["fruits"].append("apple")
grouped_items["fruits"].append("banana")
grouped_items["vegetables"].append("carrot")

print(grouped_items)
# 출력: {'fruits': ['apple', 'banana'], 'vegetables': ['carrot']}
  • 장점: 키를 미리 확인하거나 초기화하지 않아도 됩니다.
  • 주의점: 모든 키의 기본값은 동일한 default_factory를 사용합니다.

setdefault()defaultdict()의 차이점

특성 setdefault() defaultdict()
동작 방식 키가 없을 때 기본값을 추가 키가 없을 때 자동으로 기본값 생성
기본값 추가 메서드 호출 시 지정 초기화 시 default_factory로 지정
사용 시점 키를 조건부로 추가해야 할 때 키-값 쌍을 동적으로 관리할 때

두 방법의 활용 사례

setdefault()를 활용한 키별 초기화

# 문자 개수 세기
text = "hello world"
char_count = {}

for char in text:
    if char != " ":
        char_count.setdefault(char, 0)
        char_count[char] += 1

print(char_count)  
# 출력: {'h': 1, 'e': 1, 'l': 3, 'o': 2, 'w': 1, 'r': 1, 'd': 1}

defaultdict()를 활용한 키별 리스트 관리

from collections import defaultdict

# 데이터 분류
data = [("fruit", "apple"), ("fruit", "banana"), ("vegetable", "carrot")]

grouped_data = defaultdict(list)

for category, item in data:
    grouped_data[category].append(item)

print(grouped_data)
# 출력: {'fruit': ['apple', 'banana'], 'vegetable': ['carrot']}

언제 사용해야 할까?

  • setdefault(): 단일 키에 대한 조건부 초기화가 필요한 경우.
  • defaultdict(): 동일한 기본값으로 다수의 키를 처리해야 하는 경우.

이 두 가지 방법을 적절히 활용하면 코드의 가독성과 효율성을 크게 향상시킬 수 있습니다. 필요에 따라 상황에 맞는 방식을 선택하면 됩니다.

반응형