본문 바로가기
[파이썬]/자료형

[파이썬][자료형] 딕셔너리

by sung min_Kim 2023. 11. 5.
딕셔너리

키와 값의 쌍으로 데이터를 저장하는 동적 자료형


딕셔너리를 사용하는 이유는 뭘까 ?

 

 딕셔너리는 고유한 키와 값의 쌍으로 구성되어 있다.

 값은 키를 통해 참조되며 찾고자 하는 값을 빠르게 찾을 수 있다.

dic = {'name' : 'kim', 'age' : 30, 'bir' : 'jun'}
print(dic)        # {'name': 'kim', 'age': 30, 'bir': 'jun'} 키와 값의 쌍을 반환
print(type(dic))  # <class 'dict'> 반환

 

 리스트는 특정 값을 찾고자 하면 처음 순서부터 마지막 순서까지 순회하여 값을 찾는 동작을 수행하는데 반해 딕셔너리는 키를 기반으로 빠르게 찾을 수 있다는 장점이 있다는 것이다.

 


딕셔너리 표현방법

 

 딕셔너리는 중괄호 {} 를 사용하며 중괄호 안에 키와 값을 기입하여 표현한다.

dic = {'name' : 'kim', 'age' : 30, 'bir' : 'jun'}
print(dic)        # {'name': 'kim', 'age': 30, 'bir': 'jun'} 키와 값의 쌍을 반환
print(type(dic))  # <class 'dict'> 반환

 

· 키를 중복으로 사용할 경우 값을 덮어 씌워버리니 키 중복 사용은 하지 않도록 하자.
dic = {'name' : 'Kim', 'name' : 'John', 'name' : 'Bob'}
print(dic) # Bob 반환

 

· 키는 불변의 고유한 값으로 변경 가능한 동적 타입인 리스트를 키로 사용할 수 없다. 리스트를 키로 사용하자 TypeError 가 발생한 모습.
dic = {['name'] : ['kim', 'bob']}
print(dic) # TypeError: unhashable type: 'list' 에러 반환
리스트 대신에 문자열이나 숫자열 혹은 튜플과 같은 불변 타입을 키로 사용하도록 하자.
dic1 = {'name' : ['kim', 'bob']}
dic2 = {('name') : ['kim, 'bob']}
 
print(dic1) # {'name': ['kim', 'bob']} 반환
print(dic2) #             "

 


딕셔너리 연산

 

 딕셔너리는 키와 값의 쌍이 순서를 가지지 않고, 키는 고유해야 하기 때문에 산술 연산자를 지원하지 않는다. 

· 더하기나 곱하기 연산자를 사용하는 경우 해당 연산자를 딕셔너리에서 지원하지 않는다는 TypeError 가 발생하는 모습.
dic1 = {'a' : 1, 'b' : 2}
dic2 = {'c' : 3, 'd' : 4}
res = dic1 + dic2
print(res) # TypeError: unsupported operand type(s) for +: 'dict' and 'dict' 오류 반환

 


딕셔너리 추출

 

 딕셔너리에서는 대괄호 [] 를 사용하여 원하는 값을 추출할 수 있다.

 값에 접근하고자 할 경우 고유한 키를 통해야 한다는 것을 계속 유의하도록 하자.

· 대괄호 [] 를 사용해 고유한 키의 값을 추출하는 모습
dic = {'name' : ['kim', 'bob', 'merry'], 'age' : [20, 30, 40]}
print(dic['name']) # ['kim', 'bob', 'merry'] 반환
print(dic['age'])  # [20, 30, 40] 반환

 

· 추출한 값을 변경하거나 새로운 키와 값의 쌍을 추가할 수도 있다.
dic = {'name' : ['kim', 'bob', 'merry'], 'age' : [20, 30, 40]}

dic['name'][0] = 'A'
dic['name'][1:3] = ['B', 'C']
dic['age'][0:] = [10, 20, 30]

dic['num'] = [1, 2, 3] 

print(dic) # {'name': ['A', 'B', 'C'], 'age': [10, 20, 30], 'num': [1, 2, 3]} 반환
           ## 'name', 'age' 키의 값 변경, 'num' 키와 값 추가

 


딕셔너리 함수

 

 파이썬에서는 딕셔너리를 다루는 데 유용한 함수를 제공한다.

(많이 사용되는 함수 앞에는 * 별 문자를 표기할 것이며, 찾고자 하는 함수가 있다면 Cnt + F 를 통해 찾길 바란다.)

 

· * dic.keys(), values(), items() : 딕셔너리의 모든 키, 모든 값, 모든 키와 값의 쌍을 반환하는 함수들이다.
dic = {'name' : ['kim', 'bob', 'merry'], 'age' : [20, 30, 40]}

print(dic.keys())   # dict_keys(['name', 'age'])
                    ## 모든 키 반환


print(dic.values()) # dict_values([['kim', 'bob', 'merry'], [20, 30, 40]])
                    ## 모든 값 반환
                   
print(dic.items())  # dict_items([('name', ['kim', 'bob', 'merry']), ('age', [20, 30, 40])])
                    ## 모든 키와 값의 쌍 반환

 

· * dic.get() : 딕셔너리의 키를 조회하여 해당하는 값들을 반환하는 함수이다. 단, 대괄호 [] 연산자와는 다르게 get 함수는 값을 추출만 할 뿐 수정할 수는 없다.
dic = {'name' : ['kim', 'bob', 'merry'], 'age' : [20, 30, 40]}

print(dic.get('name')) # ['kim', 'bob', 'merry'] # name 키에 해당하는 값들을 반환

 

· * dic.update() : 현재 딕셔너리에 키-값 쌍을 업데이트하거나, 다른 딕셔너리로 업데이트하는 함수이다.
 - 현재 딕셔너리에 키-값 쌍을 업데이트하는 경우
dic = {'name' : ['kim'], 'age' : [20]}
dic.update(name = 'bob', job = 'singer')
print(dic) # {'name': 'bob', 'age': [20], 'job': 'singer'} 반환
 - 다른 딕셔너리로 업데이트하는 경우
dic1 = {'name' : ['kim', 'bob', 'merry']}
dic2 = {'name' : ['A', 'B', 'C']}
dic3 = {'age' : [20, 30, 40]}
                   
dic1.update(dic2) ## dic1 딕셔너리를 dic2 딕셔너리로 업데이트
dic1.update(dic3) ## dic1 딕셔너리에 dic3 딕셔너리 업데이트

print(dic1) # {'name': ['A', 'B', 'C'], 'age': [20, 30, 40]} 반환

 

· del() : 특정 키와 값을 메모리 상에서 완전히 제거하는 함수이다.
dic = {'name' : ['kim', 'bob', 'merry'], 'age' : [20, 30, 40]}
del(dic)['name'][-1]
del(dic)['age']

print(dic) # {'name': ['kim', 'bob']} 반환

 

· * pop() : 특정 키와 값을 제거하고, 그 값을 반환하는 함수이다. 제거된 함수를 확인하거나 변수에 담아 다른 곳에 활용할 수 있다. 
dic = {'name' : ['kim', 'bob', 'merry'], 'age' : [20, 30, 40]}
pop_value = dic.pop('name')
print(pop_value) # ['kim', 'bob', 'merry'] 삭제한 키와 값 반환
 - del 함수는 키와 값의 쌍을 완전히 제거해 버리기 때문에 변수에 담아 활용할 수 없다. 잘못된 구문이라는 SyntaxError 에러가 발생하는 모습
dic = {'name' : ['kim', 'bob', 'merry'], 'age' : [20, 30, 40]}
del(dic)['name']
print(dic)       # {'age': [20, 30, 40]} 메모리 상의 name 키와 값의 쌍을 완전히 삭제 후 반환

del_value = del(dic)['name']
print(del_value) # SyntaxError: invalid syntax 오류 반환

 

· zip() : 키 리스트와 값 리스트를 쌍으로 묶어 새로운 딕셔너리를 만드는 함수이다. 두 개 이상의 인자를 받아 각 리스트의 같은 위치에 있는 요소를 튜플로 묶은 리스트를 반환한다.
keys = ['kim', 'bob', 'merry']
values = [20, 30, 40]

zip(keys, values) # <zip at 0x7d315509ae80> 메모리에 저장되어 메모리 주소 반환
print(type(zip(name, age))) # <class 'zip'> 반환
 - 해당 튜플은 dict() 함수를 통해 딕셔너리로 형변환하여 사용할 수 있는 상태가 된다.
keys = ['kim', 'bob', 'merry']
values = [20, 30, 40]

dict(zip(keys, values)) # {'kim': 20, 'bob': 30, 'merry': 40} 딕셔너리로 반환

 


 

 

파이썬에서의 딕셔너리에 대해 알아보았다.

데이터를 고유한 키에 저장함으로써 접근 및 활용하기 쉬운 것이 장점이라 특정한 값을 찾는데 유용하게 사용할 수 있을 것이다.

 

딕셔너리는 순서를 가지지 않지만 리스트는 순서를 가지기 때문에 순서가 중요한 데이터 혹은 제어문으로 활용하는데 유용할 것이다.

 

또한, 딕셔너리는 고유한 키를 통해 데이터를 참조할 수 있는데 반해 리스트는 고유한 위치(인덱스)를 통해 데이터를 참조할 수 있다는 점 또한 다른 점이라 할 수 있겠다.

 

다음 글에는 참 또는 거짓을 나타내는 자료형인 불리언에 대해 알아보도록 하자.

'[파이썬] > 자료형' 카테고리의 다른 글

[파이썬][자료형] 집합  (0) 2023.11.05
[파이썬][자료형] 불리언  (0) 2023.11.05
[파이썬][자료형] 배열  (0) 2023.11.04
[파이썬][자료형] 문자형  (0) 2023.11.04
[파이썬][자료형] 숫자형  (0) 2023.11.03