본문 바로가기
코딩테스트 준비/파이썬

파이썬 자료구조: 딕셔너리

by June1010 2022. 5. 22.

Python에는 dict라는 class가 있습니다. dict는 해싱을 기반으로 데이터들을 관리해주는 자료구조로, (key, value) 쌍 형태로 값을 동시에 저장하는 형태입니다. 해싱을 기반으로 하고 있기 때문에, 삽입, 삭제, 탐색 등 모든 함수의 시간복잡도가 전부 입니다. 매우 빠른 성능을 보장하지만, 구조 특성상 들어온 값들간의 순서를 나타내주지 못합니다. (이 경우, OrderedDict 클래스를 사용하면 들어온 값들의 순서도 보장할 수 있습니다.)

 

 

dict에서 키를 바탕으로 값을 가져올 수 있는 방법은 크게 두 가지입니다.

 

dict의 get 메서드를 이용하는 방법과,

# Syntax: dictionary.get(keyname, value)

d = {1: "apple", 2: "banana", 3: "grape"}  # 딕셔너리 생성 및 초기화

print(d.get(1))  # "apple"
print(d.get(0))  # None
print(d.get(4, 0))  # 0

 

[  ]를 이용해서 키를 명시해주는 방법이 바로 그것입니다.

# Syntax: dict[key]

d = {1: "apple", 2: "banana", 3: "grape"}  # 딕셔너리 생성 및 초기화

print(d[1])  # "apple"
print(d[0])  # KeyError

둘 다 동일하게 동작하지만, get 메서드의 경우 두번째 인자로 키가 존재하지 않을 때 리턴할 default값을 명시해줄수 있고, get 메서드를 사용하는 경우 KeyError가 발생하지 않는다는 점이 다릅니다.

 

 

 

dict에서 키를 바탕으로 값을 지울 수 있는 방법 역시 크게 두 가지입니다.

 

dict의 pop 메서드를 이용하는 방법과,

d = {1: "apple", 2: "banana", 3: "grape"}  # 딕셔너리 생성 및 초기화

d.pop(1)  # 딕셔너리에서 키가 1인 값 삭제 후 값 반환
print(d)  # {2: "banana", 3: "grape"}

d.pop(0)  # 0이란 key는 존재하지 않으므로, KeyError 발생

 

del 예약어를 이용하는 방법이 바로 그것입니다.

d = {1: "apple", 2: "banana". 3: "grape"}  # 딕셔너리 생성 및 초기화

del d[1]  # 딕셔너리에서 키가 1인 값 삭제
print(d)  # {2: "banana". 3: "grape"}

del d[0]  # 0이란 key는 존재하지 않으므로, KeyError 발생

 

둘 다 똑같은 동작을 하지만, 지운 key의 value값을 사용하려면 pop 메서드를, 나머지 경우엔 del 예약어를 사용합니다.

또한, pop 메서드의 두번째 인자로 default 값을 명시해줄 수 있는데, 값을 명시해주면 키 값이 존재하지 않더라도 default 값을 반환하게 됩니다. 이 경우, 지울 키 값이 없어도 KeyError가 발생하지 않습니다.

d = {1: "apple", 2: "banana". 3: "grape"}

# KeyError 발생 X
d.pop(4, None)

댓글