반응형
지난 시간 딕셔너리 자료형에 대해 실습을 진행했습니다.
추가적으로 공부한 내용이 있어 포스팅 하겠습니다.
※ defaultdict
collections 모듈의 defaultdict 객체를 사용해서 키값이 없는 경우 기본값(default)을 반환하는 딕셔너리 객체입니다.
int, list, set 등의 기본값을 설정할 수 있습니다.
함수를 사용할 수도 있습니다.
자세한 내용은 다음 주소를 참고합니다.
https://docs.python.org/3.3/library/collections.html#collections.defaultdict
다음은 기본 딕셔너리 구조와, 기본값딕셔너리 비교입니다.
# 값이 없는 딕셔너리
dic_data={'사과':'apple'} # 딕셔너리 생성
print(dic_data['바나나']) # 존재하지 않는 키 출력
from collections import defaultdict
# 기본값 int 지정
def_dict=defaultdict(int,사과='apple')
print(def_dict['바나나'])
# 기본값 list 지정
def_dict=defaultdict(list,사과='apple')
print(def_dict['바나나'])
# 기본값 set 지정
def_dict=defaultdict(set,사과='apple')
print(def_dict['바나나'])
# 기본갑 함수 지정
def dic_default():
return '존재 하지 않는 키입니다.'
def_dict=defaultdict(dic_default,사과='apple')
print(def_dict['바나나'])
※ defaultdic 이해를 위한 실습 예제
# defaultdic 활용한 알파벳 개수
from collections import defaultdict
def_dict=defaultdict(int)
sentence='abdaeovhclakeccsedasgd'
for i in sentence:
def_dict[i]+=1
print(list(def_dict.items()))
# defaultdict 활용한 가수 이름, 노래 제목
artist=['소녀시대','소녀시대','빅뱅','빅뱅']
song=['소녀시대','GEE','하루하루','붉은노을']
def_dict=defaultdict(list)
for i,j in zip(artist,song):
def_dict[i].append(j)
print(list(def_dict.items()))
# defualtdict 활용한 중복 제거
artist=['소녀시대','소녀시대','빅뱅','빅뱅']
song=['소녀시대','GEE','하루하루','붉은노을','소녀시대','GEE','하루하루','붉은노을']
def_dict=defaultdict(set)
for i,j in zip(artist,song):
def_dict[i].add(j)
print(list(def_dict.items()))
기본값 지정을 위해서 딕셔너리.setdefault 함수를 사용할 수도 있습니다.
sentence='abdaeovhclakeccsedasgd'
dic_data={}
for i in sentence: # 기본값 0으로 초기화
dic_data.setdefault(i,0)
print(dic_data)
for i in sentence:
dic_data[i]+=1
print(dic_data)
setdefault 메소드를 사용할 수도 있지만, defaultdict 객체를 사용한다면 훨씬 간단하게 나타낼 수 있습니다.
※ defaultdic vs setdefault
수행 시간을 비교해 보았습니다.
import time
sentence='abdaeovhclakeccsedasgd'
dic_data={}
start=time.time()
for _ in range(10000):
for i in sentence: # 기본값 0으로 초기화
dic_data.setdefault(i,0)
dic_data[i]+=1
print('setdefault 시간 :',round(time.time()-start,4))
def_dict=defaultdict(int)
start=time.time()
for _ in range(10000):
for i in sentence:
def_dict[i]+=1
print('defaultdict 시간 :',round(time.time()-start,4))
간단한 코드고 수행시간이 크게 차이나지 않지만, 대용량 데이터를 다룰 경우 차이가 더 벌어질 것으로 생각됩니다.
반응형
'프로그래밍 > Python' 카테고리의 다른 글
Python-22) 지역변수 , 전역변수 : python global (2) | 2020.12.24 |
---|---|
Python-21) python read, readline, write, writelines : 파이썬 파일 쓰기, 파일 읽기 , python txt (0) | 2020.12.24 |
Python 현재 디렉토리 확인하기 (3) | 2020.12.24 |
Python-20) python lambda, map, eval (0) | 2020.12.23 |
Python-18) python 딕셔너리 메소드 : dict keys, values, items (0) | 2020.12.22 |
Python-17) list append, insert, del, remove, len, count : 리스트 객체 메소드, 리스트 메소드, 파이썬 마스터 (0) | 2020.12.21 |
Python-16) 리스트 인덱스, 추출, reverse : Python list , list 객체, 파이썬 리스트 (0) | 2020.12.15 |
Python-15) 문자 find, split , join , replace , sort : Python 문자열, 파이썬 문자열, 파이썬 정렬 (0) | 2020.12.14 |