아래글을 읽고 알게된 점.
1.
ex1 = {'a':1, 'b':2}
print(ex1)
print(ex1['b'])
print(ex1['c'])
from collections import defaultdict
def default_factory():
return 'null'
ex1 = defaultdict(default_factory, a=1, b=2,d=44)#defaultdict를 호출하기 위해 첫번째 인자로 만약
#해당 키가 없을 시에 어떠한 지정된 값을 반환하는지를 정하는 함수를 두고 나머지 인자에는 맵의 키값과 value값을 전달하고 있음
print(ex1)
print(ex1['d'])
print(ex1['c'])
2. 집합(set)이든 맵,딕셔너리(dictionary)이든 똑같이 형식은 { }이다. 다만 딕셔너리같은 경우 {'a' : 5, 'b' : 3, 'c' : 9}와 같은 형식을 취한다.
3. 반복문 안에 포함되어 있는 d.setdefault( k,0 )의 경우 비록 반복문 안에 있더라도 매번 호출되는 것이 아니라 기존 dictionary에 해당k의 값이 없을 경우만 호출된다.
---------------------------------------------------------------------------------------------------------------------------------------------------------
1. defaultdict란
collections.defaultdict는 딕셔너리(dictionary)와 거의 비슷하지만 key값이 없을 경우 미리 지정해 놓은 초기(default)값을 반환하는 dictionary이다. defaultdict과 관련하여 자세한 내용은 docs.python.org에서 확인할 수 있다.
예제의 소스코드를 통해 dict(기본 딕셔너리)와 defaultdict를 비교해보면, 예제(1-1)에서 기본 딕셔너리는 해당 키가 없는 값을 출력할 경우 KeyError Exception 에러가 나타난다. 반면에 예제(1-2)에서 defaultdict는 default_factory()라는 함수로 초기값(default)를 null로 지정해줬기 때문에 해당 키가 없는 값을 출력할 경우 초기값인 null 이 출력된다.
2. defaultdict의 인자(factor)
collections.defaultdict(default_factory, key=value,...)는 default_factory 와 key1=value1,key2=value2,...,keyn=valuen 를 인자(factor)로 받는데, default_factory 는 defaultdict의 초기값을 지정하는 인자이다. 예제(2-1)에서 default_factory 인자를 넣어주지않으면 기본 딕셔너리와 마찬가지로 KeyError Exception 에러가 난다.
default_factory인자는 메소드 형태의 값을 인자로 받는데, list(), int(), set()...나 사용자가 직접 메소드를 생성할 수 있다. 예제(3)은 default_factory를 list(), int(), set()로 지정했을 때의 초기값을 출력하는 예제이다.
3. dict.setdefault vs defaultdict
기본 딕셔너리(dict)에서도 defaultdict의 default_factory와 같은 기능을 하는 메소드인 setdefault를 통해 초기값을 지정할 수 있도록 제공한다. 하지만, docs.python.org에서도 확인할 수 있듯이 defaultdict의 default_factory가 더 간단하고, 더 빠르다. 예제(4)는 dict.setfault()와 defaultdict의 default_factory를 이용하여 리스트(s)의 원소 개수를 구하는 코드이다. 물론 이방법은 앞의 collections.Counter()를 사용하면 한줄로 구현이 가능하다.
'파이썬 기초' 카테고리의 다른 글
파이썬의 출력형식과 기타자잘자잘 한것. 꼭 익숙히 하고 있을것! (0) | 2023.02.13 |
---|---|
collections.defaultdict와 일반적인 파이썬 내장 자료구조인 사전(Dictionary)을 사용하는 예 (0) | 2023.02.06 |