: 키/값 구조로 이뤄진 딕셔너리.
파이썬 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)
딕셔너리에 키가 존재하는지 확인한다.
: 존재하지 않는 키를 조회할 경우, 에러 메시지를 출력하는 대신, 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성해준다.
>>> 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이 만들어진다.
: 아이템에 대한 개수를 계산해 딕셔너리로 리턴한다.
>>> 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()
: 입력 순서가 유지되는 딕셔너리
>>> collections.OrderedDict({'banana':3, 'apple': 4, 'pear': 1, 'orange': 2}) OrderedDict({'banana':3, 'apple': 4, 'pear': 1, 'orange': 2})
파이썬 3.7부터 딕셔너리는 내부적으로 인덱스를 이용하며, 입력 순서가 유지되도록 개선됐다 😊
파이썬 3.6 이하의 인터프리터로 코딩 테스트를 진행할 시, 유의하자 🧐!
⌜파이썬 알고리즘 인터뷰⌟ 5장_리스트, 딕셔너리