defaultdict 사용법

dict 클래스에 비해 별거 아닐 수 있지만 기특해 보이는 좋은 기능을 defaultdict 클래스가 갖고 있다.
잊어버릴 것 같아서 정리했다. 자주 사용할 수 있도록 하자. 아자!


from collections import Counter, defaultdict
from operator import itemgetter

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
print(s)

# 출력 결과
# [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

# 1. 전통적인 dict 사용
t = {}
# for k, v in s:
# if k in t:
# t[k] += v
# else:
# t[k] = v

for k, v in s:
if not k in t:
t[k] = 0
t[k] += v

# 2. 전통적인 dict 사용. 불편하지만 오히려 쉬울 수도 있는 방법
# d = {}
# for k, v in s:
# d.setdefault(k, []).append(v)
#
# t = {}
# for k, v in d.items():
# t[k] = sum(v)

# 3. defaultdict 사용
t = defaultdict(int)
for k, v in s:
t[k] += v

print(sorted(t.items(), key=itemgetter(1)))

# 출력 결과
[('red', 1), ('yellow', 4), ('blue', 6)]

# --------------------------------------------------- #

# 같은 글자 갯수 세기
m = 'mississippi'

t1 = {} # dict
for c in m:
if not c in t1:
t1[c] = 0
t1[c] += 1

t2 = defaultdict(int) # defaultdict
for c in m:
t2[c] += 1

t3 = Counter(m) # Counter

print(sorted(t1.items(), key=itemgetter(1)))
print(sorted(t2.items(), key=itemgetter(1)))
print(sorted(t3.items(), key=itemgetter(1)))

# 출력 결과
# [('m', 1), ('p', 2), ('i', 4), ('s', 4)]
# [('m', 1), ('p', 2), ('i', 4), ('s', 4)]
# [('m', 1), ('p', 2), ('i', 4), ('s', 4)]


'파이썬' 카테고리의 다른 글

enum 클래스  (0) 2017.04.09
구조체로 사용할 수 있는 collections.namedtuple  (0) 2017.04.09
정규분포와 누적분포 비교 그래프  (0) 2017.04.06
defaultdict와 딕셔너리 응용 코드  (0) 2017.04.06
matplotlib colormap  (0) 2017.04.05