딕셔너리는 { } 로 감싸고, 순서가 없으며 key : value 쌍으로 이루어진 요소끼리는 쉼표로 구분한다.
hashable, immutable한 것만 key가 될 수 있다. value는 어떤 자료형이든 다 가능하다.
dict1 = {key1 : val1, key2 : val2, key3 : val3, ... }
key, value 값이 나란히 들어있는 리스트나 튜플이 요소로 들어있는 리스트나 튜플은 dict로 변형 가능하다.
[ [ key1 , val1 ] ], [ ( key1 , val1 ) ], ( [ key1 , val1 ] ), ( ( key1 , val1 ) ) 형태가 할당되어 있는 변수에 dict()를 띄우면
-> { key1 : val1 } 이렇게 변환된다.
빈 딕셔너리 만들기
새로 선언 dict1 = {}
기존 딕셔너리 비우기 dict1.clear()
수정
확장과 동일하지만 딕셔너리에 존재하는 key인 경우 기존 value를 새로운 value가 대체한다. dict1[key1] = new_val
여러 값을 한꺼번에 수정할 때 확장과 동일한 update를 사용한다. 없는 key일 경우 추가된다. dict1.update(dict2)
있는 키, 값 확인
키가 있는지 확인 val in dict1
키가 없는지 확인 val not in dict1
딕셔너리 길이 구하기 len(dict1)
뽑아보기
특정 key에 대응하는 value 얻기 dict1[key1] 또는 dict1.get(key1)
dict1.get()은 key가 존재하지 않을 때 None을 반환한다.
key가 존재하지 않을 때 미리 정해둔 default 값을 반환하게 하기 dict1.get(key1, default_val)
모든 요소 객체 dict1.items() -> dict_items( [ (key1, val1), (key2, val2), (key3, val3) ] )
모든 키 객체 dict1.keys() -> dict_keys( [ key1, key2, key3 ] )
모든 값 객체 dict1.values() -> dict_values( [ val1, val2, val3 ] )
이 객체들은 리스트로 변환하지 않더라도 for문 같은 기본적인 iterate 구문을 실행할 수 있다.
이 객체들을 리스트로 변환할 때 * operator을 쓰거나 list()를 사용하는데, 작은 딕셔너리일 경우엔 전자가 빠르지만 list()와 달리 내용물이 한 개일 땐 문제가 생길 수 있다.
읽기 쉽게 줄바꿈된 형태로 출력
from pprint import pprint as pp
pp(dict1)
확장
수정과 동일하지만 딕셔너리에 없는 key인 경우 key : value 쌍을 추가한다. dict1[new_key] = val
두개의 딕셔너리 합치기 dict1.update(dict2) 또는 dict3 = {**dict1, **dict2}
세개 이상의 딕셔너리 합치기 dict4 = {**dict1, **dict2, **dict3} unpacking 사용 참고 링크
삭제
존재하는 key인지 확실할 때 삭제 del dict1[key1]
존재하는 key인지 불확실할 때 삭제
try:
del dict[key1]
except KeyError:
pass
존재하는 key인지 불확실할 때 뽑아내면서 삭제 dict1.pop(key1, None) 참고 링크
복사(shallow)
dict2 = dict1.copy
dict2 = dict(dict1)
복사(deep)
from copy import deepcopy
dict2 = deepcopy(dict1)
+ 추가할 것: 정렬, switch 스타일로 응용하기
'Python' 카테고리의 다른 글
Python - Import (0) | 2021.01.17 |
---|---|
Python - list vs tuple, set vs dictionary (0) | 2021.01.15 |
Python - Set (0) | 2021.01.15 |
Python - Tuple (0) | 2021.01.15 |
Python - List (0) | 2021.01.14 |