List와 Tuple은, 순서 위치인 Index 값을 컴퓨터에게 알려줌으로써, 특정 값을 사용할 수 있다. 그러나 이 값이 무엇을 의미하는지는 표시하지 못한다. 예를 들어, 김철수라는 사람의 정보를 List 형태로 다음과 같이 나타내었다고 가정해보자.
========================================================================
KimCS_info = ["Kim", "Cheolsu", 39, , 12, "Gangnam, Seoul", "Goyang, Gyeonggi", "Republic of Korea", 800101, 040924"]
=========================================================================
자, 여러분들은 김철수의 집 주소가 무엇인지 정확히 알 수 있을까? 혹은 이 사람의 나이는 정확히 몇 살인지, 또는 생년월일이 언제인지, 자신있게 말할 수 있을까?
주어진 정보를 통해 추론을 하면, 생년월일이나 나이는 얼추 맞출 수 있을 것이다. 그러나 김철수의 정보에, 직장 주소와, 거주 주소가 동시에 적혀 있는 상황에서, 어떤 정보도 없이 거주 주소를 찾아보라고 하면... 찾을 수가 없다. (50%의 확률이니 찍어보자는 소리는 하지 말자. 이건 시험이 아니다)
필자는 위의 정보를 성, 이름, 나이, 직장 근속년수, 직장 주소, 거주주소, 국적, 생년월일, 차 번호 순으로 나열한 것이다. 하지만, List와 Tuple은 각 값이 무엇을 의미하는지 정확하게 표시해주지 못한다. 그리고, 개인의 특정 정보만 출력하고자 할 때, List나 Tuple이 나타내는 정보가 많으면 많을수록, Index 값을 찾는 과정이 쉽지가 않다. 이러한 불편함으로 인해 나타난 것이 바로 Dictionary, 사전이라고 불리는 자료형이다.
1. Dictionary(사전 자료형)
엑셀을 많이 사용해보신 분들이라면, 필드와 값이라는 단어에 익숙할 것이다. 필드는 정보가 무엇을 의미하는지 사람이 알아볼 수 있도록 단어로 표기한 것이고, 값은 필드의 내용이라고 보면 된다. 위의 예에서, 김철수의 "이름"은 필드이고, 철수의 영문명인 "Cheolsu"는 이름 필드의 값이 된다.
Dictionary는 필드와 값을 이용한 선언 과정을 거친다. 정식 포맷은 다음과 같다.
=========================================================
Dict_변수명 = {"Field1": "value1", "Field2": "value2", "Field3", "value3"....}
=========================================================
Dictionary 변수형은 { } 괄호를 사용하며, List와 Tuple 처럼 하나의 값이 Item(원자값)이 되는 것이 아니라, 필드명과 필드값이 합쳐져 하나의 Item을 이룬다. 위에서 예시로 든, 김철수의 정보 중 일부를 Dictionary로 선언하는 방법은 아래처럼 진행할 수 있다.
DIctionary 내에서 사용하는 필드명은 문자열로 이루어져 있기 때문에 반드시 홑따옴표나 쌍따옴표를 사용해 표기해야한다. 값의 경우, 일반 변수 사용방법과 동일하게, 숫자의 경우는 따옴표를 함께 사용하지 않는다.
그럼, 변수 선언 후, 특정 필드에 위치한 값을 따로 출력하기 위해서는 어떻게 해야할까? List와 Tuple처럼 Index를 사용하면 괜찮지 않을까? 하지만 이런 방법으로 출력을 시도한다는 것은, 애초에 Dictionary 자료형을 만들어 낸 목적과 거리가 멀기 때문에 아래의 그림처럼 컴퓨터가 에러 메세지를 출력하게 된다.
Key Error 라는 문구가 보이는데, 이 Key는 필자가 위에서 필드명이라고 언급했던 녀석과 동일한 의미를 가진다. 즉, 위 에러 문구의 의미는, 해당 Dictionary에 0이라는 이름의 키(필드명)가 없으니, 출력을 할 수 없다는 의미다.
이제 에러의 의미를 알았으니, 정확한 필드명으로, 각 값을 출력해보자.
출력이 잘 되는 것을 확인할 수 있다. 참고로, 키(필드명) 역시, 하나의 변수로 취급되기 때문에, KimCS_info [age] 와 같이 키 값 옆에 따옴표를 표기하지 않을 경우, 컴퓨터가 찾을 수 없다는 에러를 출력하게 된다. 만약, 따옴표를 쓰지 않고 출력하기를 원한다면 아래와 같이 진행하면 되는데... 조금 귀찮다.
2. 특정 Dictionary의 Key 값만 따로 출력하기
이제 필자는, 맨 처음 예시로 들었던 김철수의 모든 정보를 Dictionary로 선언할 것이다. 그리고, Alex의 정보 역시, Dictionary로 표현을 할 것이다. 그러나 두 사람의 정보가 포함된 Dictionary의 Key 값은 다르게 할 것이다.
Alex의 경우, 미성년자라 직장도 없고, 차도 없다. 따라서 직장 근속년수, 회사주소 및 차량 번호는 생략되었다. 만약 제 3자가, 이 Alex가 미성년자임을 인지하지 못하고, Alex["Car_number"] 를 출력하려고 한다면, 에러가 발생할 것이다. 그럼, 이 두 사람의 정보가 포함된 Dictionary가 어떤 Key를 가지고 있는지 확인할 수 있는 방법에는 무엇이 있을까?
=============================
Dictionary_name.keys()
=============================
keys() 메서드는 말 그대로 Dictionary의 key 목록을 보여주는 기능을 가진다. Key 목록을 보여준다는 말은, 컴퓨터가 이 메서드의 실행 결과로, Dictionary의 Key들을 List 형태로 출력한다는 것이다.
그럼, 여기서 조금 더 생각의 범위를 넓혀보자. Key 만 따로 뽑는 메서드가 존재하니, 필드값만 따로 출력하는 메서드가 존재하지 않을까?
=======================================
Dictionary_name.values()
======================================
조금 더 나가보자. 과연 이 두 값을 한 번에 깔끔하게 표시해주는 메서드는 존재하지 않을까? 물론, 존재한다.
==========================================
Dictionary_name.items()
==========================================
출력은 각자 알아서 진행해보자.
지금까지의 내용으로부터 알 수 있는 것은, Dictionary가 제공하는 메서드의 이름은, 대부분 Dictionary를 구성하는 부분 별 명칭을 이용하며(keys, values, items), 각각의 메서드가 Dictionary의 특정 정보만을 따로 목록화하여 출력해준다는 것이다.
3. Dictionary에 새 정보 추가 및 제거
Dictionary의 Item(원자값)은 필드명과 필드 값, 2개로 구성되어 있다고 위에서 언급했다. 따라서, Dictionary에 새로운 값을 추가하는 것 역시, 필드명과 필드값을 동시에 사용해서 진행해야 한다.
================================
Dictionary_name[필드명] = 필드값
================================
새 정보의 추가는 얼핏보면 List나 Tuple과 유사하다. 다른 점이 있다면 Index가 들어가는 자리에 필드명이 들어갔다는 정도. Alex의 부모님이, 자신의 명의로 된 차를 구매해 주었다고 가정해보자.
Alex의 개인 정보 Dictionary 마지막에, 차량 번호 123321이 추가된 것이 보인다. 이제, Alex가 이 차를 몰다가 사고가 나서, 폐차를 진행했다고 해보자.
====================================
del Dictionary_name[지우고자하는 필드값의 필드명]
====================================
다시, 차량 번호가 삭제된 것을 확인할 수 있다.
(이러기 싫지만)필자가 조금 극단적인 예시를 다시 들어보려고 한다. 차를 폐차한 Alex가 자전거를 구입해서 다니다가 교통사고로 세상을 떠났다고 가정해보자. 그럼 Alex의 모든 정보를 지워야하는데, 일일이 필드명을 언급하면서 del로 지우기에는 너무 오랜 시간이 걸린다.
===============================
Dictionary_name.clear()
===============================
clear() 메서드로, Alex_info에 포함된 모든 내용이 삭제되었음을 확인할 수 있다.
마지막으로, 이번 포스팅에서 언급한 Dictionary 자료형에 대한 정보를 간략히 정리하면서 글을 마무리한다.
Dictionary 자료형 사용법 | |
Dict_name={"필드명":"필드값"[, "필드명2":"필드값2", ... ]} | Dictionary의 선언 |
Dict_name["필드명"] | Dictionary 내, 특정 필드값의 호출 |
Dict_name["새 필드명"] = 새 필드 값 | Dictionary 내, 새 정보 추가 |
del Dict_name["삭제할 필드명"] | Dictionary 내, 특정 정보 삭제 |
Dict_name.keys() | Dictionary의 모든 필드명을 목록화 |
Dict_name.values() | Dictionary의 모든 필드값 목록화 |
Dict_name.items() | Dictionary의 모든 필드명:필드값 목록화 |
Dict_name.clear() | Dictionary 내, 모든 정보의 삭제 |
FIN.
'Python > Python Basic' 카테고리의 다른 글
10. Python - 반복문 2. while문으로 구구단 출력하기 (0) | 2019.08.20 |
---|---|
9. Python - 반복문 1. for문으로 구구단 출력하기 (0) | 2019.08.13 |
7. Python - 변수 자료형 2, Tuple (0) | 2019.08.01 |
6. Python - 변수 자료형 1, LIST(목록) (0) | 2019.07.26 |
5. Python - print() 함수 사용법 3 (0) | 2019.07.17 |
댓글