신규 블로그를 만들었습니다!

2020년 이후부터는 아래 블로그에서 활동합니다.

댓글로 질문 주셔도 확인하기 어려울 수 있습니다.

>> https://bluemiv.tistory.com/

딕셔너리

앞에서 리스트와 튜플을 알아보았습니다. 그 밖에도 파이썬에는 딕셔너리(Dictionary)라는 자료형이 있습니다.

 

 

파이썬 사전 자료형을 이용하면 가독성을 높일 수 있다는 장점이 있습니다. 무슨 소리냐 하면은, 사람은 {이름 : 아무개, 나이 : 26}와 같이 보는 형태가 편합니다.

어떤게 편하신가요?

1. my_info = [아무개, 26]

2. mt_dict = {name : 아무개, age : 26}

대부분의 사람들은 2번의 표현 방식을 더 보기 편하다고 느끼실 겁니다.

 

딕셔너리는 key, value 형태로 이루어져있습니다. key와 value는 1:1 매칭이 되어 이루어 집니다. 형태를 살펴보면,

딕셔너리의 형태

{key1 : value1, key2 : value2, key3 : value3, ...생략...}

기본적으로 key와 value로 이루어지고, 값이 여러개가 있는 경우에는 쉼표(,)를 이용해서 구분합니다. 여기서 주의할 점은 key에는 변하지 않는 값을 사용하고, value에는 변하는 값 또는 변하지 않는 값 둘다 사용할 수 있습니다.

 

기억이 나실지 모르겠지만, 리스트는 변할 수 있는 값에 해당합니다. 반대로 튜플은 변하지 않는 값에 해당 합니다. 이렇게 변할 수 있는 값을 mutable(변하기 쉬운), 변할 수 없는 값을 immutable(변하기 어려운)이라고 합니다. 자주 사용하는 용어이므로 알아 두는것이 좋습니다.

 

1. 기본 사용 방법

my_dict = {"name" : "hongku", "age" : 26}
print(my_dict)​

 

결과

{'name': 'hongku', 'age': 26}​

 

위의 경우는 dictionary 전체를 출력하는 예제입니다. 위와는 다르게 값을 하나하나 따로 출력하고 싶을때는 "사전["key"]"와 같이 사용합니다. 예제를 살펴보겠습니다.

my_dict = {"name" : "hongku", "age" : 26}
#print(my_dict)
print("name:", my_dict["name"])
print("age:", my_dict["age"])​

 

결과

name: hongku
age: 26​

위와 같은 방법 말고도 dictionary 내부 메소드인 get() 함수를 이용하면, 값을 가져올 수 있습니다.

 

my_dict = {"name" : "hongku", "age" : 26}
print(my_dict.get("name"))​

 

결과

hongku​

 

참고.

만약 사전에 정의되지 않은 key를 호출하려하면 KeyError가 발생 합니다. 이때, get() 함수를 이용하면, 편리합니다. 예를들어

my_dict = {"name" : "hongku", "age" : 26}
print(my_dict["new"])​

 

결과

Traceback (most recent call last):
  File "C:/dev/python/workspace/exam01.py", line 10, in <module>
    print(my_dict["new"])
KeyError: 'new'​

위와같이 KeyError가 발생합니다.

 

만약 get() 메소드를 이용한다면, None 값이 출력됩니다. 만약 None이 싫을때는 value값을 설정해 줄 수 있습니다. get("key", "default값") 인자 2개를 사용하는 방법입니다.

my_dict = {"name" : "hongku", "age" : 26}
print(my_dict.get("new"))
print(my_dict.get("new", "default value"))​

 

결과

None
default value​

생각보다 유용하게 사용되므로, 알아두면 좋은 메소드 입니다.

 

2. 딕셔너리 값 추가/수정/삭제

2-1. 추가하기

값을 추가할때는 사전["새로운키"] = 새로운값 형태를 사용합니다.

my_dict = {"name" : "hongku", "age" : 26}
print("추가하기 전:", my_dict)

my_dict["new_value"] = "HELLO"
print("추가한 후:", my_dict)​

 

결과

추가하기 전: {'name': 'hongku', 'age': 26}
추가한 후: {'name': 'hongku', 'age': 26, 'new_value': 'HELLO'}
​

결과를 보면 알 수 있듯이, new_value : HELLO 라는 항목이 추가 된 것을 확인 할 수 있습니다.

 

2-2. 수정하기

수정하는 방법 또한 매우 간단합니다. 기존에 있던 키에 해당하는 값에 바로 다른 값을 넣어주면, 덮어씌어지면서 값이 수정되는 것을 확인 할 수 있습니다.

my_dict = {"name" : "hongku", "age" : 26}
my_dict["new_value"] = "HELLO"
print("수정하기 전:", my_dict)

my_dict["new_value"] = "010-1234-1234"
print("수정 후:", my_dict)​

 

결과

수정하기 전: {'name': 'hongku', 'age': 26, 'new_value': 'HELLO'}
수정 후: {'name': 'hongku', 'age': 26, 'new_value': '010-1234-1234'}
​

결과를 보면 알 수 있듯이 new_value라는 값이, "HELLO"에서 "010-1234-1234"로 변경된 것을 확인 할 수 있습니다.

 

2-3. 삭제하기

삭제하는 방법에는 3가지가 있습니다. 갹체를 삭제하는 del 키워드를 이용하거나 pop() 메소드(함수)를 이용하는 방법입니다.

my_dict = {"name" : "hongku", "age" : 26}
print("삭제하기 전:", my_dict)

del my_dict # del(my_dict)
print("삭제 후:", my_dict) # 에러 발생​

 

결과

삭제하기 전: {'name': 'hongku', 'age': 26}
Traceback (most recent call last):
  File "C:/dev/python/workspace/exam01.py", line 10, in <module>
    print("삭제 후:", my_dict)
NameError: name 'my_dict' is not defined​

결과를 보면 에러가 발생한 것을 확인 할 수 있는데, 에러내용을 보면 "NameError: name 'my_dict' is not defined" 'my_dict' 이라는 이름의 자료형이 선언되지 않았다고 합니다. 즉 사전이 삭제가 됐기 때문에, 선언되지 않았다고 에러가 발생하게 됩니다.

 

두번째 방법은 pop() 메소드를 이용하는 것입니다.

my_dict = {"name" : "hongku", "age" : 26}
print("삭제하기 전:", my_dict)

#del my_dict # del(my_dict)
#print("삭제 후:", my_dict) # 에러 발생

print(my_dict.pop("age"))
print("삭제 후:", my_dict)​

 

결과

삭제하기 전: {'name': 'hongku', 'age': 26}
26
삭제 후: {'name': 'hongku'}​

결과를 보면 age 항목이 사라진 것을 확인 할 수 있습니다. pop()은 del과는 다르게 사전 자체를 지우는 것이 아니라 항목 하나만을 지웁니다. 그리고 지우면서, 그 지우는 값을 반환 합니다.

 

del과 pop()의 차이

1. del은 사전 자체를 지워버림. 반면, pop()은 사전의 원소 하나만을 지움.

2. del은 반환하는 값이 없지만, pop()은 지우는 원소의 값을 반환 함.

 

마지막 방법은, clear() 메소드(함수)를 사용하는 것입니다. key, value 쌍 모두 삭제를 해줍니다.

my_dict = {"name" : "hongku", "age" : 26, "addr" : "판교 삼평동", "phone" : "010-1234-1234"}
print(my_dict.clear())​

 

결과

None​

(파이썬에서는 null값을 None이라고 표현합니다.)

 

3. 딕셔너리 관련 메소드

3-1. key들의 리스트

key들만을 따로 리스트로 뽑아내는 keys()라는 메소드(함수)가 있습니다. 예제를 살펴보면,

my_dict = {"name" : "hongku", "age" : 26, "addr" : "판교 삼평동", "phone" : "010-1234-1234"}
print(my_dict.keys())​

 

결과

dict_keys(['name', 'age', 'addr', 'phone'])​

결과를 보면 알 수 있듯이, 사전에 있는 모든 key들이 리스트 형태로 나오는 것을 확인 할 수 있습니다.

 

3-2. value들의 리스트

value들만을 따로 리스트로 뽑아내느 values()라는 메소드(함수)가 있습니다. 예제를 살펴보면,

my_dict = {"name" : "hongku", "age" : 26, "addr" : "판교 삼평동", "phone" : "010-1234-1234"}
#print(my_dict.keys())
print(my_dict.values())​

 

결과

dict_values(['hongku', 26, '판교 삼평동', '010-1234-1234'])​

사전에 있는 value들이 리스트 형태로 반환 되는 것을 확인 할 수 있습니다.

 

3-3. key, value의 튜플

위 2개는 key 또는 value만을 뽑아 낸다면, items()라는 메소드(함수)를 이용하면, key, value를 여러개의 튜플로 이루어진 리스트로 뽑아 낼 수 있습니다. 예제를 살펴보면,

my_dict = {"name" : "hongku", "age" : 26, "addr" : "판교 삼평동", "phone" : "010-1234-1234"}
#print(my_dict.keys())
#print(my_dict.values())
print(my_dict.items())​

 

결과

dict_items([('name', 'hongku'), ('age', 26), ('addr', '판교 삼평동'), ('phone', '010-1234-1234')])​
key, value라는 튜플이 여러개로 리스트 형태로 반환되는 것을 확인 할 수 있습니다.

관련된 글

2018/08/31 - [Language/Python] - Python :: 파이썬의 숫자형 자료형(정수, 실수, 복소수, 8진수, 16진수)

2018/09/03 - [Language/Python] - Python :: 파이썬 문자열(string) 알아보기(이스케이프 문자, 인덱싱, 슬라이싱)

2018/09/08 - [Language/Python] - Python :: 파이썬 리스트(List) 사용방법과 여러가지 메소드

2018/09/19 - [Language/Python] - Python :: 파이썬 튜플(Tuple) 자료형 개념과 사용방법

2018/09/27 - [Language/Python] - Python :: 파이썬3 requests 모듈 살펴보기(설치, 사용방법 및 예제)


Reference

https://wikidocs.net/16

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기