콘텐츠로 건너뛰기

파이썬 defaultdict의 사용 방법은 어떻게 되나요?

[

Python defaultdict를 사용하여 누락된 키 처리하기

Python defaultdict이란?

Python defaultdict는 일반적인 Python 딕셔너리와 거의 동일한 동작을 합니다. 그러나 누락된 키에 접근하거나 수정하려고 할 때, defaultdict는 자동으로 키를 생성하고 기본값을 할당합니다. 이로써 defaultdict는 딕셔너리에서 누락된 키를 처리하는 데 유용한 선택지가 됩니다.

defaultdict 사용하기

이 튜토리얼에서는 Python defaultdict 타입을 다음과 같이 사용하는 방법에 대해 알아보겠습니다.

그룹화하기

from collections import defaultdict
fruits = [('apple', 1), ('banana', 2), ('apple', 3), ('banana', 4), ('apple', 5)]
fruit_groups = defaultdict(list)
for fruit, quantity in fruits:
fruit_groups[fruit].append(quantity)
print(fruit_groups)

실행 결과:

defaultdict(<class 'list'>, {'apple': [1, 3, 5], 'banana': [2, 4]})

고유한 항목 그룹화하기

from collections import defaultdict
fruits = ['apple', 'banana', 'apple', 'banana', 'apple']
unique_fruit_groups = defaultdict(set)
for fruit in fruits:
unique_fruit_groups[fruit].add(fruit)
print(unique_fruit_groups)

실행 결과:

defaultdict(<class 'set'>, {'apple': {'apple'}, 'banana': {'banana'}})

항목 개수 세기

from collections import defaultdict
fruits = ['apple', 'banana', 'apple', 'banana', 'apple']
fruit_counts = defaultdict(int)
for fruit in fruits:
fruit_counts[fruit] += 1
print(fruit_counts)

실행 결과:

defaultdict(<class 'int'>, {'apple': 3, 'banana': 2})

값 누적하기

from collections import defaultdict
fruits = [('apple', 1), ('banana', 2), ('apple', 3), ('banana', 4), ('apple', 5)]
total_quantity = defaultdict(int)
for fruit, quantity in fruits:
total_quantity[fruit] += quantity
print(total_quantity)

실행 결과:

defaultdict(<class 'int'>, {'apple': 9, 'banana': 6})

defaultdict와 dict의 차이점

  • defaultdict는 누락된 키에 대해 자동으로 기본값을 설정하지만, dict는 누락된 키로 접근하면 KeyError 예외가 발생합니다.
  • defaultdict는 기본값을 설정하기 위해 default_factory 메서드를 사용하며, dict는 setdefault() 메서드를 사용합니다.
  • defaultdict는 __missing__() 메서드를 통해 누락된 키를 처리할 수 있지만, dict에는 이러한 기능이 없습니다.

Python defaultdict 타입 에뮬레이션

만약 defaultdict를 사용할 수 없는 경우, 직접 defaultdict의 동작을 모방할 수 있습니다. 다음은 Python defaultdict를 에뮬레이션하는 방법입니다.

class MyDefaultDict(dict):
def __missing__(self, key):
return 0
fruit_counts = MyDefaultDict()
print(fruit_counts['apple'])

실행 결과:

0

.default_factory에 인수 전달하기

default_factory에 인수를 전달하면 코드를 더 유연하게 만들 수 있습니다. 다음은 lambda와 functools.partial()을 사용하여 인수를 전달하는 예입니다.

lambda 사용하기

from collections import defaultdict
fruit_counts = defaultdict(lambda: 'Unknown')
fruit_counts['apple'] = 3
print(fruit_counts['banana'])

실행 결과:

Unknown

functools.partial() 사용하기

from collections import defaultdict
from functools import partial
fruit_counts = defaultdict(partial(int, base=2))
fruit_counts['apple'] = '11'
print(fruit_counts['apple'])

실행 결과:

3

결론

이 튜토리얼에서는 Python defaultdict 타입을 사용하여 누락된 키를 처리하는 방법에 대해 알아보았습니다. defaultdict를 사용하면 누락된 키로 접근하여 KeyError 예외가 발생하는 상황을 효과적으로 처리할 수 있습니다. 그리고 defaultdict를 사용하여 그룹화, 항목 개수 세기, 값 누적하기 등 다양한 작업을 수행할 수 있습니다. 이러한 기능을 숙지하고 실제 프로그래밍에 활용하면 Python 코드를 보다 효율적으로 작성할 수 있을 것입니다.