파이썬/자료구조
[파이썬 자료구조] defaultdict dictionary 차이와 활용
메가구글
2022. 3. 28. 22:05
1. defaultdict 소개
- dict 클래스의 서브 클래스
- dictionary에서는 (key,value)로 사용된다.
- 기존 dictionary에서 접근할 때 key의 값이 없거나 없는 key를 조작할려할 때 keyError가 발생한다.
- 이를 보완한 것이 defaultdict이다.
- 기존 클래스의 다른 점은 하나의 메소드와 쓸 수있는 인스턴스 변수다.
- defaultdict에서는 사용자가 없는 key를 접근 or 조작할 때 key 값이 없다면 defaultdict 쪽에서 key를 만들고 defualt 값을 자체적으로 생성해준다. 이 기능이 dictionaries에서 missing key 문제를 해결해준다.
2. defaultdict 활용
from collections import defaultdict
dep = [('영업부', '서린'),
('영업부', '조인'),
('회계부', '민기'),
('마케팅부','유엔 '),
('마케팅부', '소다 ')]
dep_dd = defaultdict(list)
for department, employee in dep:
dep_dd[department].append(employee)
dep_dd
실행결과
더보기
각 부서별에 값에는 default값이 들어가있다가 append로 각 값들을 초기화시켜주니 부서별 사원이름이 나오게 되었다.
3. defaultdict 중복 제거 (Set)
from collections import defaultdict
dep = [('영업부', '서린'),
('영업부', '조인'),
('회계부', '민기'),
('회계부', '민기'),
('마케팅부','유엔 '),
('영업부', '조인'),
('마케팅부', '소다 ')]
dep_dd = defaultdict(set)
for department, employee in dep:
dep_dd[department].add(employee)
dep_dd
이렇게 중복되는 값이 있을 때 set을 이용하면 딕셔너리안에 중복되는 아이템이 없게 설정할 수 있다.
실행결과
4. defaultdict 안에 있는 각 key 안의 개수 세기
from collections import defaultdict
dep = [('영업부', '영업사원1'),
('영업부', '영업사원2'),
('회계부', '회계사원1'),
('회계부', '회계사원2'),
('마케팅부','마케팅사원1 '),
('영업부', '영업사원3'),
('마케팅부', '마케팅사원2')]
dep_dd = defaultdict(int)
for department, _ in dep:
dep_dd[department]+= 1
dep_dd
defaultdict을 int로 설정할 경우 리턴값은 0이며 이를 활용해 각 부서의 사원수를 셀 수 있다.
대신 이 코드를 실행할 떄에는 데이터의 중복값이 없어야한다. 있을 경우 다 포함되서 나올 수 있다.
다른 활용방법으로는 영어 단어안에 포함되어있는 알파벳 개수를 셀 때 사용할 수 있다.
실행결과
5. defaultdict key의 총합 구하기
from collections import defaultdict
incomes = [('Books', 1250.00),
('Books', 1300.00),
('Books', 1420.00),
('Tutorials', 560.00),
('Tutorials', 630.00),
('Tutorials', 750.00),
('Courses', 2500.00),
('Courses', 2430.00),
('Courses', 2750.00),]
dd = defaultdict(float)
for product, income in incomes:
dd[product] += income
for product, income in dd.items():
print(f'total income for this {product}: ${income:,.2f}' )
실행결과
참고자료 링크