hashing 된 맵, 해싱 함수를 사용하여 key와 value 쌍으로 데이터를 보관하는 맵 자료구조
특성
- 순차적으로 데이터를 저장하지 않는다.
- key를 통해 value 를 얻는다.
- value값은 중복가능하지만 key는 중복될 수 없다.
- 수정 가능(mutable)하다.
- 시간복잡도
- 삽입 : O(1)
- 탐색 : O(1)
Dictionary
### 선언 및 초기화
d = {}
d = {'alice': 1, 'bob': 20, 'tony': 15, 'suzy': 30}
d = dict()
d = dict(alice = 5, bob = 20, tony = 15, suzy = 30)
# 컴프리헨션 초기화
num_d = {key: 0 for key in range(10)} # {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0}
d = {name : age for name, age in d.items()} # {'alice': 1, 'bob': 20, 'tony': 15, 'suzy': 30}
d = {name : age for name, age in d.items() if name == 'alice'} # {'alice': 1}
### 검색
d['alice'] # 5
d['bob'] # 20
### update
d['alice'] = 5 # key가 없다면 추가된다.
d.update({'kim': 10, 'yu': 20}) # 여러 값 수정, 없는 key라면 추가
### dictionary for문 사용
# key 탐색
for key in d:
print(key) # alice, bob, tony, suzy // 순서 보장 X
for key in d.keys():
print(key) # alice, bob, tony, suzy // 순서 보장 X
# value 탐색
for val in d.values():
print(val) # 1, 20, 15, 30
# key, value 탐색
for key, val in d.items():
print("...")
### in : 키가 dictionary 에 있는지 검사
'alice' in d # True
'kuku' in d # False
### del : 요소 삭제
del d['alice'] # { 'bob': 20, 'tony': 15, 'suzy': 30 }
### get : 키가 있는지 없는지 모를 때, 탐색을 한다면 get 을 사용
d.get('alice') # 5
d.get('kim') # None
d['kim'] # 오류 발생
### dictionary 정렬
a = {'a' : 2, 'c': 123, 'b': 22, 'f': 11}
# key 로 정렬
print(sorted(a.items(), key=lambda x : x[0])) # [('a', 2), ('b', 22), ('c', 123), ('f', 11)]
# value 로 정렬
print(sorted(a.items(), key=lambda x : x[1])) # [('a', 2), ('f', 11), ('b', 22), ('c', 123)]
# key기준 정렬 후 다시 dictionary 로 만들기
print(dict(sorted(a.items(), key=lambda x : x[0]))) # {'a': 2, 'b': 22, 'c': 123, 'f': 11}
# value기준 정렬 후 key 만 추출해 list 로 만들기
print([i[0] for i in sorted(a.items(), key=lambda x : x[1])]) # ['a', 'f', 'b', 'c']
Counter
from collections import Counter
Counter(["hi", "hey", "hi", "hi", "hello", "hey"]) # Counter({'hi': 3, 'hey': 2, 'hello': 1})
counter = Counter("hello world") # Counter({'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
# dictionary 처럼 사용 가능
counter["l"] += 1
"o" in counter # True
del counter["o"]
# most_common
Counter('hello world').most_common() # 내림 차순 정렬 배열 반환
#[('l', 3), ('o', 2), ('h', 1), ('e', 1), (' ', 1), ('w', 1), ('r', 1), ('d', 1)]
Counter('hello world').most_common(2) # 인자로 앞에서부터 출력할 개수를 전달
#[('l', 3), ('o', 2)]
728x90