딕셔너리
key와 value로 이루어진 딕셔너리
파이썬 3.7+ 부터 입력 순서가 유지됨
내부적으로 해시 테이블(11장에서 자세히 소개)로 구현되어 있다.
해시 테이블은 다양한 타입을 키로 지원하면서도 입력과 조회가 모두 O(1)에 가능
분활 상환 분석에 따른 시간 복잡도는 O(1)
연산 | 시간 복잡도 | 설명 |
---|---|---|
len(a) | O(1) | 요소의 개수를 리턴 |
a[key] | O(1) | 키를 조회하여 값을 리턴 |
a[key]=value | O(1) | 키/값을 삽입 |
key in a | O(1) | 딕셔너리에 키가 존재하는지 확인 |
collections 모듈은 다양한 기능들을 지원 (앞으로 많이 사용)
- collections.defaultdict() : 항상 디폴트 값을 생성해 키 오류를 방지
- collections.Counter() : 요소의 값→키 , 요소의 개수→값 형태로 만들어 카운팅
딕셔너리 활용 방법
- 오류
>>> a = {'key1':'value1','key2':'value2'}
>>> a['key3']='value3'
>>> a
{'key1':'value1','key2':'value2','key3':'value3'}
존재하지 않는 key를 조회할 경우 KeyError 발생 → try구문으로 예외처리
try:
print(a['key4'])
except KeyError:
print('존재하지 않는 키')
존재하지 않는 키를 삭제할 때도 발생
try를 사용한 예외 처리 방법 외에도 if else를 통한 key가 존재하는지 아닌 지를 미리 확인 가능
- .items()
for k,v in a.items():
print(k,v)
와 같은 형식으로 key와 value를 각각 꺼내올 수 있다.
- del
del a['key1']
del를 사용하면 리스트와 비슷하게 해당 key와 value가 삭제된다.
리스트 del 과 비교 ⇒ del a[i] : i번째 index에 해당하는 요소를 삭제
딕셔너리 모듈
특수한 형태의 컨테이너 자료형인 defaultdict,Counter,OrderedDict에 대해 살펴본다.
- defaultdict 객체
존재하지 않는 키를 조회할 경우, 에러 메시지를 출력하는 대신
default 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성
>>> a = collections.defaultdict(int)
>>> a['A']=5
>>> a['B']=4
>>> a
defaultdict(<class 'int'>, {'A':5,'B':4)}
>>> a['C']+=1
>>> a
defaultdict(<class 'int'>, {'A':5,'B':4,'C':1)} # collections.defaultdict 클래스
defualt 값인 0을 기준으로 자동으로 생성 후에 +1 연산을 한 뒤
key가 ‘C’인 Value에 0+1 =1 을 전달한다.
인자에 해당하는 자리에 여러 자료형 int,float와 같은 자료형을 넘어
list,set과 같은 자료구조도 사용 가능하다.
해당 자료형,자료구조의 형태로 새로운 key에 대한 빈 value를 default로 만들어 주는 것이다!
- Counter 객체
아이템에 대한 개수를 계산해 딕셔너리로 반환
>>> a=[1,2,3,4,5,5,5,6,6]
>>> b=collections.Counter(a)
>>> b
Conter({5:3,6:2,1:1,2:1,3:1,4:1}) # collections.Counter 클래스
- 가장 빈도수가 높은 요소 추출 ⇒ most_common(top_k)
>>> b.most_common(2)
[(5,3),(6,2)]
- OrderedDict 객체
대부분의 언어에서 해시 테이블을 이용한 자료형은 입력 순서가 유지되지 않는다.
파이썬 3.6 이하에서도 마찬가지였기 때문에
입력 순서가 유지되는 OrderdDict이라는 별도의 객체를 제공
>>> collections.OrderedDict({'banana':3, 'apple':4,'pear':1,'orange':2})
OrderedDict([('banana':3), ('apple':4),('pear':1),('orange':2)])
그러나 파이썬 3.7부터 딕셔너리는 내부적으로 인덱스를 이용하여 입력 순서가 유지된다.
하지만, 코딩 테스트 당시 3.6 이하를 쓸 경우 입력 순서가 유지되지 않을 수 있다는 것 주의!
'파이썬 알고리즘' 카테고리의 다른 글
파이썬 리스트 구조 (0) | 2023.04.18 |
---|---|
자료형, 자료구조, 추상 자료형 (0) | 2023.04.18 |
빅 오 표기법 (0) | 2023.04.18 |
파이썬 문법 기본 (0) | 2023.04.18 |