Appia의 IT세상

파이썬[Python] defaultdict(기본값 있는 dictionary) - collections 모듈 본문

Python/Python 기본

파이썬[Python] defaultdict(기본값 있는 dictionary) - collections 모듈

Appia 2020. 4. 22. 07:54
반응형

이썬에서 제공하는 Dictionary[딕셔너리] 사용하다보면, /값이 존재하지 않는 경우에 대한 처리를 해야 하는 경우가 많습니다. 그럴 경우에 기본 값을 설정하는 경우가 있습니다.

 

Collections 모듈은 기존에 존재하는 dictionary 본인의 의도대로 새로 생성한 부분이 있는 같습니다. 이번에는 앞서 포스팅 했던 OrderedDict 살짝 다른 defaultdict 대해서 살펴보고자 합니다.

 

기본 dictionary에는 setdefault라는 메소드가 있습니다. , 특정 키에 대해서 값이 없는 경우 다음과 같이 key 값을 기본값을 지정할 있습니다. 

 

그럼 다음 예제를 한번 보겠습니다. 

example)

normalDict = {}
 
normalDict.setdefault("V",0)
 
print(normalDict)
 
# result 
 
{'V'0}
cs

물론 이와 같은 형태로 초기값을 지정을 할 수가 있습니다. 위의 부분은 그냥 Dictionary를 지정하는 거와 차이가 없습니다. 그럼 다음 코드를 한번 살펴보겠습니다. 

example)

normalDict = {}
 
normalKey =["A","B","C"]
 
for item in normalKey:
 
    normalDict.setdefault(item, 0)
 
print(normalDict)
cs

result)

{'A'0'B'0'C'0}
cs

위와 같은 형태에서 setdefault를 많이 사용합니다. 하지만, 매번 함수를 호출해야 하기 때문에 생각보다 성능적인 측면 즉 속도에서 그닥 효율적이지 않습니다. 

 

그래서 많은 사람들은 setdefault보다, collections모듈에서 defaultdict를 사용합니다. 그럼 간단히 사용하는 방법에 대해서 살펴보도록 하겠습니다. 

example) 

import collections
 
normalDict = collections.defaultdict(int)
 
normalKey =["A","B","C"]
 
for item in normalKey:
 
    normalDict[item]
 
print(normalDict)
cs

result) 

defaultdict(<class 'int'>, {'A'0'B'0'C'0})
cs

defaultdict을 사용하면 다음과 같이 출력이 됩니다. defaultdict()인자값으로 lamda:0을 넣어도 되지만, 위와 같이 int를 넣어도 기본값으로 0으로 입력이 됩니다. 

 

그럼 다음 예시를 한번 살펴보겠습니다. 

example) 

import collections
 
normalDict = collections.defaultdict(int)
 
print(normalDict)
 
normalDict["a"]
 
print(normalDict)
 
normalDict["v"]
 
print(normalDict)
cs

result)

defaultdict(<class 'int'>, {})
 
defaultdict(<class 'int'>, {'a'0})
 
defaultdict(<class 'int'>, {'a'0'v'0})
cs

 

위에서 보이는 바와 같이 최초에 없는 키값을 입력해도 에러가 나지 않고, 다음과 같이 설정된 값으로 초기화가 됩니다. 그래서 defaultdict에 자동으로 추가됩니다. 

 

오늘은 간단하게 defaultdict에 대해서 살펴봤습니다. 생각보다 잘 안쓰는 부분이라 저도 많은 부분이 부족하지만, 혹 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments