[파이썬] 딕셔너리(Dictionary) 자료형 정리

728x90

[파이썬] 딕셔너리(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
728x90