Python/파이썬 기초

파이썬 기초 자료형 : 딕셔너리(dict)

jimmy_AI 2021. 11. 30. 15:59
반응형

파이썬에서 사용하는 기초 자료형인 딕셔너리를 사용하는 방법에 대해 간단히 다루어보겠습니다.

 

딕셔너리 자료형에서는 다른 프로그래밍 언어의 해쉬맵, 해쉬테이블 자료형을 대신하는 역할을 하는데요,

데이터를 key : value pair 형태 로 저장하여 key 값이 주어지면 이에 매칭되는 value를 반환하는 역할을 하는 자료형입니다.

딕셔너리(dict 자료형) 선언

value에는 문자열, 정수, 실수, 리스트, 튜플, 데이터프레임 등 다양한 자료형이 거의 제한없이 들어갈 수 있으나, key에는 리스트 등 자료형은 들어갈 수 없습니다.(튜플은 가능합니다.)

 

key : value 형태로 : 로 구분하여 pair를 지정하고, 쉼표( , )로 pair를 구분해주시면 됩니다.

# 가능한 원소 예시
dict_1 = {'a' : 1, 2 : 'b', 3.5 : [1, 2], (1, 2, 3) : 6.5}

# 불가능한 원소 예시 (TypeError: unhashable type: 'list')
dict_2 = {[1, 2] : 3}

 

딕셔너리 값 찾기, get 함수, 새로운 값 추가, 값 수정, 값 삭제

우선, 기본적으로 key에서 value를 찾는 방법을 설명해보겠습니다.

[] 모양으로 key를 감싸주거나 get 함수를 이용하는 방법도 있습니다.

dict_a = {'a' : 12, 'b' : 89, 'c' : 75}

print(dict_a['a']) # 12 출력
print(dict_a.get('b')) # 89 출력

get 함수는 없는 원소에 대해서는 None을 반환합니다. []로 없는 key 탐색 시에는 error를 반환합니다.

dict_a = {'a' : 12, 'b' : 89, 'c' : 75}

print(dict_a.get('d')) # None 출력
print(dict_a['d']) # KeyError 발생

새로운 원소를 추가하거나 수정, 삭제하는 것은 다음 코드처럼 진행할 수 있습니다.

dict_a = {'a' : 12, 'b' : 89, 'c' : 75}

# 기존 값 수정
dict_a['b'] = 34

# 새로운 값 선언
dict_a['d'] = 56

# 값 삭제
del dict_a['a']

print(dict_a) # {'b': 34, 'c': 75, 'd': 56}
반응형

딕셔너리 순회(keys, values, items), 역방향 탐색(value to key)

마지막으로 딕셔너리 내 자료들을 순회하는 방법과 역방향 탐색을 하는 예시 코드를 보여드리겠습니다.

딕셔너리 내 key는 keys()로, value는 values()로, key - value pair는 items()로 조회할 수 있으며, for 문 등을 통한 순회가 가능합니다.

dict_a = {'a' : 12, 'b' : 89, 'c' : 75}

# key 나열
print(dict_a.keys()) # dict_keys(['a', 'b', 'c'])

# value 나열
print(dict_a.values()) # dict_values([12, 89, 75])

# key : value pair 나열
print(dict_a.items()) # dict_items([('a', 12), ('b', 89), ('c', 75)])

# key 순회 예시(a, b, c 차례로 출력)
for key in dict_a.keys():
    print(key)

마지막으로 value에서 key 방향으로 역방향 탐색을 하는 예시를 보여드리며, dict자료형에 대한 포스팅을 마무리하도록 하겠습니다. 이 경우는 여러 가지 방법이 있지만, 가장 간단한 방법은 역방향 딕셔너리를 생성한 뒤에, 기존 value를 가지고 key를 탐색해주면 됩니다.

dict_a = {'a' : 12, 'b' : 89, 'c' : 75}

# 역방향 딕셔너리 생성(key와 value가 뒤집힌 형태)
dict_b = {v:k for k, v in dict_a.items()}

print(dict_b[89]) # b 출력