컨테이너안의 데이터들의 개수를 셀 때 collections모듈의 Counter를 사용한다.
'요소가 딕셔너리 키'로 저장되고 '개수가 딕셔너리값'으로 저장되는 컬렉션이다.
딕셔너리 자료형이다.
✔ type은 Dictionary 자료형이다.
tmp = ['kim', 'park', 'choi', 'kim', 'kim', 'kim', 'choi', 'park', 'choi']
ex = collections.Counter(tmp)
print(ex)
✔ .keys() & .values()
print(ex.keys())
print(ex.values())
✔ .items()
import collections
tmp = "ABCDEEEEEFFFGG"
ex = collections.Counter(tmp)
for key, value in ex.items():
print(key, '가', value, '개 있음')
✔ 합집합(|)과 교집합(&) 연산이 가능하다.
import collections
ex1 = collections.Counter('ABCDEFGGGGG')
ex2 = collections.Counter('ABCDEFG')
print(ex1 & ex2)
print(ex1 | ex2)
✔ 없는 key를 조회하면 0이 출력된다.
import collections
a = 'aaabcc'
sh = collections.Counter(a)
sh['a'] -= 1
print(sh['a']) # 2 출력
print(sh['x']) # 0 출력
딕셔너리에서 존재하지 않는 키를 조회할 경우 KeyError exception이 난다.
하지만 defaultdict는 존재하지 않는 키를 조회하면 에러가 나지 않고 설정한 디폴트 값을 기준으로 해당 키에 대한 아이템을 딕셔너리에 추가해준다.
인자를 int, list, set 등으로 지정할 수 있다.
딕셔너리 자료형이다.
✔ defaultdict의 first argument로 default_factory를 제공하면 된다.(디폴트값을 5로 설정)
from collections import defaultdict
def default_factory():
return 5
tmp = defaultdict(default_factory)
tmp['아이유'] = 10
tmp['카리나'] = 2
print(tmp)
print(tmp['손예진'])
print(tmp)
✔ 디폴트값을 0으로 하고 싶다면 default_factory로 int를 넘겨주면 된다.
from collections import defaultdict
tmp = defaultdict(int)
tmp['명수'] = 10
tmp['재석'] = 2
print(tmp)
print(tmp['호동'])
print(tmp
✔ 인자값을 list로 줬을 때
import collections
aaa = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
tmp = collections.defaultdict(list)
for key, value in aaa:
tmp[key].append(value)
print(tmp)
✔ 문자열 개수 세기
import collections
aaa = 'aaabbcccccdeee'
sH = collections.defaultdict(int)
for x in aaa:
sH[x] += 1
for kk in sH.keys():
print(kk)
print('---')
for jj in sH.values():
print(jj)
print('---')
for key, value in sH.items():
print(key, '는', value, '개 입니다.')