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 |