딕셔너리는 저번 글에 써 쓰인 대로 python에서 굉장히 자주 쓰이는 자료형이다.
기본적으로 키, 값으로 이뤄져 있으며 대부분의 연산이 O(1)에 처리할 수 있게 되어있어 매우 효율적이다.
Python 3.6 이하에서는 입력 순서가 유지되지 않아 collections.OrderedDict()라는 별도의 자료형을 제공하였다.
3.7+에서는 자동으로 입력 순서도 유지되지만 코딩 테스트에서는 3.6 이하의 버전도 번번이 사용되므로, 저런 자료형을 알고 시험에 들어가는 것이 좋다.
딕셔너리는 다음과 같이 선언한다.
>>> a = dict()
>>> a = {}
처음에 초깃값을 지정해 선언할 수도 있고 동적 자료형이기 때문에 나중에 추가하는 것도 가능하다.
>>> a = {'key1':'value1', 'key2':'value2'}
>>> a
{'key1':'value1', 'key2':'value2'}
>>> a['key3'] = 'value3'
>>> a
{'key1':'value1', 'key2':'value2', 'key3':'value3'}
딕셔너리의 키를 지정하면 조회할 수 있게 된다. 이때 리스트(list)는 존재하지 않는 인덱스를 조회할 경우 IndexError가 발생하지만 딕셔너리는 KeyError가 발생한다.
이땐, 다음과 같은 try 구문으로 예외 처리를 할 수 있다.
try:
print('a[key4]')
except KeyError:
print('존재하지 않는 키')
딕셔너리에 존재하는 키, 값은 for문으로도 조회가 가능하다. 이때 사용하는 메소드가 items()이다.
>>> for k,v in a.items():
print(k,v)
key1 value1
key2 value2
key3 value3
삭제를 할 땐 del로 삭제한다.
>>> del a['key1']
>>> a
{'key2':'value2', 'key3':'value3'}
딕셔너리 모듈
딕셔너리와 관련된 특수한 형태의 컨테이너 자료형들을 살펴보자.
- defaultdict 객체
defaultdict 객체는 존재하지 않는 키를 조회할 경우, 에러 메시지를 출력하는 대신 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성해준다.
>>> import collections
>>> a = collections.defaultdict(int)
>>> a['A'] = 5
>>> a['B'] = 4
>>> a
defaultdict(<class 'int'>, {'A': 5, 'B': 4})
#존재하지 않는 C를 조회
>>> a['C'] += 1
>>> a
defaultdict(<class 'int'>, {'A': 5, 'B': 4, 'C': 1})
- Counter 객체
Counter 객체는 아이쳄에 대한 개수를 계산해 딕셔너리로 리턴한다.
>>> import collections
>>> a = [1, 2, 3, 4, 5, 5, 5, 6, 6]
>>> b = collections.Counter(a)
>>> b
Counter({5: 3, 6: 2, 1: 1, 2: 1, 3: 1, 4: 1})
그렇다면 Counter 객체에서 가장 빈도 수가 높은 요소는 어떻게 추출할까?
그것은 다음과 같이 most_common()을 사용하면 된다.
>>> b.most_common(2)
[(5, 3), (6, 2)]
이처럼 most_common()의 괄호 안에 숫자를 넣으면 그 숫자의 순위만큼 빈도수가 높은 요소들을 순서대로 출력해준다.
- OrderedDict 객체
OrderedDict 객체는 위에서 말한 바와 같이 원래 파이썬에서 딕셔너리는 입력 순서가 유지되지 않았다. 이때 딕셔너리의 입력 순서를 유지해주는 객체로 OrderedDict 객체가 쓰인다.(3.7+에서는 딕셔너리의 입력 순서가 유지되지만 알아두자.)
>>> collections.OrderedDict({'banana': 3, 'apple': 4, 'pear': 5, 'orange': 6})
OrderedDict([('banana', 3), ('apple', 4), ('pear', 5), ('orange', 6)])
이렇게 파이썬에서 주로 쓰이는 자료형에 대해 대강 알아보았다.
이다음부터는 알고리즘 관련 문제를 직접 풀어보면서 더 자세히 알아보도록 하겠다.
'Python' 카테고리의 다른 글
반복문 for문 주의할 점 (0) | 2023.09.16 |
---|---|
문자열 조작(1 - 유효한 팰린드롬) (0) | 2021.01.16 |
리스트(list) (0) | 2020.12.19 |
Python 시작하기 (0) | 2020.12.19 |