[Python] 딕셔너리(Dictionary)

someng·2022년 7월 20일
0

Python

목록 보기
3/11

딕셔너리란?

: 키/값 구조로 이뤄진 딕셔너리.
파이썬 3.7+에서는 입력 순서가 유지되며, 내부적으로는 해시 테이블(Hash Table)로 구현되어 있다.

📌 딕셔너리의 활용 방법

  • 딕셔너리 선언
a = dict()

a = {}

a = {'key1': 'value1', 'key2': 'value2'}
  • 딕셔너리 값 조회
>>> a['key1']
'value1'
  • 딕셔너리 키/값 조회
>>> for k,v in a.items():
		print(k,v)
...
key1 value1
key2 value2
key3 value3
  • 딕셔너리 키 삭제
>>> del a['key1']
>>> a
{'key2': 'value2', 'key3': 'value3'}

📌 딕셔너리의 주요 연산 시간 복잡도

  • len(a): O(1)
    요소의 개수를 리턴한다.
  • a[key]: O(1)
    키를 조회하여 값을 리턴한다.
  • a[key] = value: O(1)
    키/값을 삽입한다.
  • key in a: O(1)
    딕셔너리에 키가 존재하는지 확인한다.

✨ 딕셔너리 모듈

🍋 defaultdict 객체

: 존재하지 않는 키를 조회할 경우, 에러 메시지를 출력하는 대신, 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템생성해준다.

>>> 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)

C는 존재하지 않는 키이므로 원래의 딕셔너리라면 KeyError가 발생하겠지만, defaultdict 객체는 에러 없이 바로 +1 연산이 가능하고 이 경우, 디폴트인 0을 기준으로 자동으로 생성한 후, 여기에 1을 더해 최종적으로 1이 만들어진다.

🍋 Counter 객체

: 아이템에 대한 개수를 계산해 딕셔너리로 리턴한다.

>>> 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 객체는 에는 아이템의 값이, 에는 해당 아이템의 개수가 들어간 딕셔너리를 생성한다!

  • 가장 빈도 수가 높은 요소 추출
# 가장 빈도가 높은 2개의 요소 추출
>>> b.most_common(2)
[(5, 3), (6, 2)]
  • 요소 빼기
>>> ex_counter1 = collections.Counter('I love you')
>>> ex_counter2 = collections.Counter('I love my family')
# 2번 카운터 - 1번 카운터
>>> ex_counter2.subtract(ex_counter1)
>>> print(ex_counter2)
Counter({'m': 2, ' ': 1, 'l': 1, 'y': 1, 'f': 1, 'a': 1, 'i': 1, 'I': 0, 'v': 0, 'e': 0, 'o': -1, 'u': -1})
  • 0이하인 요소 제거
    빈 collection.Counter()를 더하면, 0 이하인 아이템이 제거된다!
counter += collections.Counter()

🍋 OrderedDict 객체

: 입력 순서가 유지되는 딕셔너리

>>> collections.OrderedDict({'banana':3, 'apple': 4, 'pear': 1, 'orange': 2})
OrderedDict({'banana':3, 'apple': 4, 'pear': 1, 'orange': 2})

파이썬 3.7부터 딕셔너리는 내부적으로 인덱스를 이용하며, 입력 순서가 유지되도록 개선됐다 😊
파이썬 3.6 이하의 인터프리터로 코딩 테스트를 진행할 시, 유의하자 🧐!

출처

⌜파이썬 알고리즘 인터뷰⌟ 5장_리스트, 딕셔너리

profile
👩🏻‍💻 iOS Developer

0개의 댓글