본문 바로가기
Language/Python

defaultdict lambda 응용

by Wikinist 2023. 8. 23.

defaultdict는 Python의 collections 모듈에서 제공하는 클래스로, 기본값을 갖는 딕셔너리를 생성하는 데 사용됩니다. defaultdict는 일반적인 딕셔너리와 유사하지만, 존재하지 않는 키에 접근할 때마다 미리 설정된 기본값을 반환합니다. 이때 기본값은 사용자가 지정한 함수를 통해 생성됩니다. 여기서는 defaultdict를 사용하여 lambda 함수를 기본값 생성 함수로 활용하는 예제를 살펴보겠습니다.

예를 들어, 각 키마다 빈 리스트를 값으로 갖는 딕셔너리를 생성하고자 할 때, defaultdict와 lambda 함수를 활용할 수 있습니다. 다음은 이에 대한 예제입니다:

from collections import defaultdict

# 빈 리스트를 기본값으로 갖는 defaultdict 생성
my_defaultdict = defaultdict(lambda: [])

# 값을 추가하는 예시
my_defaultdict['colors'].append('red')
my_defaultdict['colors'].append('blue')
my_defaultdict['shapes'].append('circle')

print(my_defaultdict)

위 코드에서 defaultdict(lambda: [])은 빈 리스트를 기본값으로 갖는 defaultdict 객체를 생성합니다. 여기서 lambda: []는 빈 리스트를 생성하는 무명 함수(lambda 함수)입니다. 따라서 위 예제의 출력은 다음과 같을 것입니다.

defaultdict(<function <lambda> at 0x...>, {'colors': ['red', 'blue'], 'shapes': ['circle']})

위 출력을 보면 'colors'와 'shapes' 키가 각각 빈 리스트를 값으로 갖습니다. 이후 코드에서 각 키에 대해 리스트에 값을 추가했습니다.

다음은 defaultdict에서 lambda 함수를 사용하여 딕셔너리를 기본값으로 설정하는 예제입니다.

from collections import defaultdict

# 딕셔너리를 기본값으로 갖는 defaultdict 생성
default_dict_of_dicts = defaultdict(lambda: {"key1": 0, "key2": "default"})

# 값 추가 예시
default_dict_of_dicts['data1']['key1'] = 42
default_dict_of_dicts['data2']['key2'] = "custom value"

print(default_dict_of_dicts)

위 코드에서 defaultdict(lambda: {"key1": 0, "key2": "default"})는 딕셔너리를 기본값으로 갖는 defaultdict를 생성합니다. 여기서 lambda: {"key1": 0, "key2": "default"}는 딕셔너리를 생성하는 무명 함수입니다. 따라서 위 예제의 출력은 다음과 같을 것입니다.

defaultdict(<function <lambda> at 0x...>, {'data1': {'key1': 42, 'key2': 'default'}, 'data2': {'key1': 0, 'key2': 'custom value'}})

위 출력을 보면 'data1'과 'data2' 키가 각각 딕셔너리를 값으로 갖습니다. 이후 코드에서 각 키의 딕셔너리에 값을 추가했습니다.

이처럼 lambda 함수를 사용하여 딕셔너리를 기본값으로 설정하는 defaultdict를 활용하면 복잡한 데이터 구조를 생성하고 관리할 수 있습니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Language > Python' 카테고리의 다른 글

[conda] 가상환경 모듈 정보 파일  (0) 2023.09.08
D드라이브 Conda환경 생성  (0) 2023.09.03
리스트 컴프리헨션  (0) 2023.08.10
strftime(), strptime()  (0) 2023.07.31
파이썬 동등비교 __eq__()  (0) 2023.07.31