[파이썬] 딕셔너리(Dictionary) 자료형 정리
대응관계를 나타내는 자료형을 연관 배열 또는 해시라고 한다.
파이썬에서 이러한 자료형을 딕셔너리라고 하며, key와 value값을 가진 자료들로 목록화할 수 있다.
{key : value} 형식으로 지정된다.
dic = { 'name' : 'mom', 'age' : 30, 'birth' : 1225 }
key와 value는 : 로 구분되어지며 각각의 쌍을 , 로 구분한다.
dic이라는 딕셔너리에 name, age, birth라는 key가, name, age, birth라는 키에 각각 mom, 30, 1225라는 value가 할당된다.
key값은 정수가 될 수도 있고, value 값에는 튜플이나 리스트가 올 수도 있다.
딕셔너리 쌍 추가, 제거
dic = {1: 'a'}
dic[2] = 'b'
dic[3] = [1, 2, 3]
print(dic)
{1: 'a', 2: 'b', 3: [1, 2, 3]}
새로운 key와 value값을 쌍으로 추가한다.
dic = {1: 'a', 'age' : 25, 'gender' : 'male'}
del dic[1], dic['gender']
print(dic)
{'age': 25}
del 함수를 이용하여 딕셔너리의 key에 접근하면 해당 key와 value가 쌍으로 삭제된다.
value 값을 얻기 위해 리스트와 튜플이 슬라이싱, 인덱싱 기법을 사용하는 것과 다르게, 딕셔너리는 key값으로만 접근할 수 있다.
dic[1]이 dic의 두 번째 인덱스를 가리키는 것이 아닌, dic의 1이라는 key값이 가진 value값을 가리키는 것이다.
삽입 순서의 보존
파이썬 3.7부터는 딕셔너리의 삽입 순서가 보존된다.
키를 삭제하거나 값을 바꾸어도 키의 순서가 보존되는 것을 확인할 수 있다.
dic = {0: 'woo', 1: 'wak', 2 : 'good'}
del dic[1]
dic[3] = 'min'
dic[4] = 'su'
print(dic)
dic[0] = None
dic[1] = 'messi' # 지운 키를 다시 삽입하면 맨 끝으로 삽입된다.
print(dic)
print({k : None for k in 'wak'})
{0: 'woo', 2: 'good', 3: 'min', 4: 'su'}
{0: None, 2: 'good', 3: 'min', 4: 'su', 1: 'messi'}
{'w': None, 'a': None, 'k': None}
주의점
딕셔너리 안에서 key가 중복으로 존재하면 하나를 제외한 나머지 값이 전부 무시되므로 주의해야 한다.
value에는 정수, 문자열, 리스트, 튜플 등등 모두 올 수 있으나
key는 정수, 문자열, 튜플만 올 수 있다.(리스트와 같이 변하는 값은 올 수 없다.)
dic = {1: 'woo', 1: 'wak', (3, 4) : 'good'}
print(dic)
{1: 'wak', (3, 4): 'good'}
딕셔너리 함수들
딕셔너리.keys() -> 해당 딕셔너리의 key값들에 대한 객체를 반환한다.
for문의 범위 조건에도 올릴 수 있으나, 리스트의 함수들(append, insert, pop, remove, sort..)는 사용할 수 없다.
dic = {'a': 'woo', 'b': 'wak', 'c' : 'good'}
print(dic.keys())
print(list(dic.keys()))
for k in dic.keys():
print(k, end=' ')
dict_keys(['a', 'b', 'c'])
['a', 'b', 'c']
a b c
value값들 가지고도 리스트를 만들 수 있다.
dic = {'a': 'woo', 'b': 'wak', 'c' : 'good'}
print(list(dic.values()))
['woo', 'wak', 'good']
Key, Value 쌍 얻기, 통째로 지우기
딕셔너리.items() -> key, value값에 대한 튜플을 객체로 반환한다.
딕셔너리.clear() -> 딕셔너리의 모든 요소를 삭제한다. 빈 딕셔너리 {}로 표현된다.
dic = {'a': 'woo', 'b': 'wak', 'c' : 'good'}
print(dic.items())
print(list(dic.items()))
dic.clear()
print(dic)
dict_items([('a', 'woo'), ('b', 'wak'), ('c', 'good')])
[('a', 'woo'), ('b', 'wak'), ('c', 'good')]
{}
Key로 Value값 얻기
딕셔너리.get(key) -> 해당 key의 value값을 반환한다.
dic = {'a': 'woo', 'b': 'wak', 'c' : 'good'}
print(dic['b'])
print(dic.get('b'))
print(dic.get('e'))
print(dic['e'])
wak
wak
None
key error
dic['b']와 dic.get('b') 모두 해당 key값의 value값을 반환하는 것은 같지만,
딕셔너리에 존재하지 않은 key를 가져오려고 하면 dic['e']의 경우만 에러가 발생한다.
get은 없는 key값에 대해서 None을 반환한다.
None대신 미리 정해 둔 디폴트 값을 대신 가져오고 싶을 때는 get(가져올 key, 디폴트 값)을 사용한다.
dic = {'a': 'woo', 'b': 'wak', 'c' : 'good'}
print(dic.get('e', '없는 key값 입니다.'))
없는 key값 입니다.
key값 중 e가 없으므로 디폴트 값인 '없는 key값 입니다.'를 출력한다.
dic = {0: 'woo', 1: 'wak', 2 : 'good'}
for i in range(4):
print(dic.get(i, '없는 key값 입니다.'))
woo
wak
good
없는 key값 입니다.
Key가 딕셔너리에 있는지 확인
찾을 key in 딕셔너리 -> 있으면 True, 없으면 False를 반환.
dic = {0: 'woo', 1: 'wak', 2 : 'good'}
for i in range(4):
print(i in dic)
True
True
True
False
'파이썬' 카테고리의 다른 글
[파이썬] 이진 탐색 라이브러리 bisect (0) | 2022.02.24 |
---|---|
[python] 정렬 함수 sort(), sorted() (0) | 2022.01.28 |
[python] 입력 받기 : input()과 sys.stdin.readline() (0) | 2022.01.23 |