defaultdict 객체는 존재하지 않는 키를 조회 할 경우, 에러 메시지를 출력하는 것이 아닌 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성해준다. 마찬가지로 실제로는 collections.defaultdict 클래스를 갖는다.
import collections
a = collections.defaultdict(int)
a['A'] = 5
a['B'] = 2
a['C'] += 1
print(a)
-> defaultdict(<class 'int'>, {'A': 5, 'B' : 4, 'C':1})
import collections를 안해주면 NameError가 뜨므로 잊지말고 꼭 해주자!
그냥 딕셔너리 였다면 C는 존재 하지 않는 키이므로 KeyError가 발생하겠지만, defaultdict 객체는 디폴트인 0을 기준으로 자동 생성한후 여기에 1을 더해 최종적으로 'C'라는 key값에 1이라는 value를 저장해준다.
Counter 객체는 아이템에 대한 개수를 계산해 딕셔너리로 리턴한다.
import collections
a = [1,2,3,4,1,1,1,2,2]
b = collections.Counter(a)
print(b)
-> Counter({1:4, 2:3, 3:1, 4:1})
Counter 객체는 위와 같이 키에는 아이템의 값이, 값에는 해당 아이템의 개수가 들어간 딕셔너리를 생성한다.
개수를 자동으로 계산해주기에 편리하며, 가장 빈도수가 높은 요소 또한 most_common()을 사용하여 나타 낼 수 있다.
import collections
b.most_common(2) # 가장 빈도수 높은거 2개의 요소만 나타냄
[(1:4), (2:3)]
현재 파이썬 3.7 이상의 버전에서는 딕셔너리는 내부적으로 인덱스를 이용하며 입력 순서가 유지가 되지만, 3.6이하에서는 해시 테이블을 이용한 자료형은 입력 순서가 유지 되지 않았다. 이를 위해, OrderedDict라는 별도의 객체를 제공하였다.
import collections
collections.OrderDict({"A" : 1, "B" : 2, "C" : 3})
-> OrderDict({"A" : 1, "B" : 2, "C" : 3})