달나라 노트

Python collections : defaultdict (default값이 있는 dictionary) 본문

Python/Python ETC

Python collections : defaultdict (default값이 있는 dictionary)

CosmosProject 2021. 7. 15. 01:08
728x90
반응형

 

 

 

 

 

 

collections module의 defaultdict를 이용하면 default값이 있는 dictionary를 생성할 수 있습니다.

 

이게 무슨 말인지 예시를 통해 알아봅시다.

 

 

dict_1 = {
    'a': 1,
    'b': 2
}

print(dict_1['c'])



-- Result
NameError: name 'c' is not defined

 

위 예시에선 dictionary에 존재하지 않는 key인 c를 참조하려고 하니 NameError가 발생합니다.

당연한 얘기이겠죠.

 

 

 

 

 

import collections

def default_factory():
    return 'no_data'

dict_2 = collections.defaultdict(default_factory, a=1, b=2)
print(dict_2)
print(dict_2['a'])
print(dict_2['c'])



-- Result
defaultdict(<function default_factory at 0x7fc3eadbb160>, {'a': 1, 'b': 2})
1
no_data

 

위 예시는 동일한 dictionary를 defaultdict를 이용한 예시입니다.

 

default_factory

먼저 collections.defaultdict는 dictionary에 존재하지 않는 key를 참조하려 할 때 출력할 default 값을 설정해줘야합니다.

이 default 인자를 default_factory라고 하며 default_factory는 위 예시에서처럼 별도의 method로 제시되어야 합니다.

 

default_factory 함수를 따로 정의해서 no_data라는 텍스트를 return하게 하였습니다.

그리고 이 함수를 default_factory로서 주어주게되죠.

 

 

a=1, b=2

collections.defaultdict에서는 key=value 형태로 key value 쌍을 명시해서 dictionary를 생성합니다.

a가 key이며 1은 그에 해당하는 value입니다.

b가 key이며 2는 그에 해당하는 value입니다.

 

 

결과를 보면 defaultdict로 dict_2가 잘 생성된걸 볼 수 있습니다.

dict_2['a']에서처럼 a라는 key를 참조하니 1이라는 값을 잘 return해줍니다.

dict_2['c']에서 c는 dict_2에 존재하지 않는 key입니다.

다만 이것은 defaultdict이기 때문에 이미 정해준 default_factory 함수에 의해 NameError 대신 no_data라는 텍스트가 return됩니다.

 

 

 

 

 

 

 

import collections

def set_default():
    return 'no_data'

dict_2 = collections.defaultdict(set_default, a=1, b=2) # 1
print(dict_2['c'])

dict_2 = collections.defaultdict(list, a=1, b=2) # 2
print(dict_2['c'])

dict_2 = collections.defaultdict(set, a=1, b=2) # 3
print(dict_2['c'])

dict_2 = collections.defaultdict(dict, a=1, b=2) # 4
print(dict_2['c'])



-- Result
no_data
[]
set()
{}

 

1. default_factory에 사용될 함수 이름은 반드시 default_factory일 필요는 없습니다.

자유롭게 설정하면 됩니다.

 

2. default_factory에 사용할 함수는 custom function뿐 아니라 python 내장 함수도 가능합니다.

list, set, dict는 각각 list, set, dictionary를 생성하는 함수인데 따라서 default_factory의 결과로 비어있는 list, set, dictionary를 return해주는 것을 볼 수 있습니다.

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments