요즘 이론공부만 했더니 조금 지겹다..
할일이 있어서 공부를 하는 거지만 빨리 분량을 끝내고 코드짜는게 더 즐거울 것 같다...
오늘은 !! 알고리즘 문제를 하나만 더 풀고, 네트워크와 카테캠 강의를 듣고 프로젝트 DB 설계를 해야겠다.
파이썬의 딕셔너리는 키/값
으로 이루어진 해시테이블의 구현체이다.
파이썬의 키 : 불변 객체
파이썬의 값 : 다양한 타입
해시테이블을 통해서 자료를 저장하기 때문에 입력과 조회 모두 O(1)에 가능하다.
그러나 입력 순서를 보장해주지 않는다.
# | Operation | Example | Class | Notes |
---|---|---|---|---|
1 | Store | d[k] = v | O(1) | 데이터 저장 |
2 | Length | len(d) | O(1) | 길이 출력 |
3 | Delete | del d[k] | O(1) | 요소 제거 |
4 | 검색 | key in d | O(1) | 요소 검색 |
5 | get/setdefault | d.get(k) | O(1) | key에 따른 value 확인 |
6 | Pop | d.pop(k) | O(1) | pop |
7 | Pop item | d.popitem() | O(1) | 랜덤하게 선택해서 pop |
8 | Clear | d.clear() | O(1) | similar to s = {} or = dict() |
9 | View | d.keys() | O(1) | same for d.values() / 키값 전체 가져오기 |
10 | Construction | dict(...) | O(len(...)) | (key, value) 튜플 개수만큼 |
10 | Iteration | for k in d: | O(N) | 전체 딕셔너리 순회 |
a_dict = {} #{}를 이용
b_dict = dict() #타입
c_dict = {1:"1", 2:"2"} #초기화까지 한번에
c_dict = {1:"1", 2:"2"}
c_dict[1] >>1
c_dict[2] >>2
#c_dict[3] >>>> KeyError
⚠️ 없는 값에 접근하면 KeyError
이 발생한다.
next(iter(participant_dict))
for i in c_dict.keys():
print(i, end= " ") #>>1 2
딕셔너리객체.key
로 리턴받을 수 있다.
if 3 in c_dict:
print("3은 존재")
else:
print("3은 존재 X")
키 값이 있는지 검색할 수 있다~!~!
딕셔너리와 관련된 특수한 형태의 컨테이너 자료형들을 알아보자.
#collections.defaultdict객체
default_dict = collections.defaultdict(int) #0
default_dict = collections.defaultdict(bool) #False
print(default_dict["1"])
conter
객체에서 가장 빈도 수가 높은 요소는 most_commom()
를 통해 얻을 수 있다.#collections.Counter객체
a_list = [1,2,3,4,3,2,1,8,8,8,8]
a_counter = collections.Counter(a_list)
print(a_counter) #Counter({8: 4, 1: 2, 2: 2, 3: 2, 4: 1})
print(a_counter.most_common(1)) #상위부터 몇개꺼낼건지
#collections.OrderedDict() 객체
oder_dict = collections.OrderedDict()
oder_dict[1] = "1"
oder_dict[2] = "2"
oder_dict[3] = "3"
print(oder_dict) #OrderedDict({1: '1', 2: '2', 3: '3'})
하하 재미있다^^