5. 고급 자료형 II > 5-2. 딕셔너리란?

딕셔너리란?

해당 파트는 아래 영상 시청 후 교안을 정독해주세요.

딕셔너리의 형태

앞서 배운 자료형인 '튜플'은 그 자체가 수학적인 용어라 조금 낯설으셨겠지만, 이번에 배울 자료형은 누구에게나 익숙할 단어 '딕셔너리'입니다! 딕셔너리는 실제로 사전과 같은 형태를 취합니다.

idol = {'지젤':'에스파', '이마크':'엔시티', '영훈':'더보이즈', '로제':'블랙핑크'}

코드로 보니 확 와닿지 않으시죠? 표로 한번 볼게요.

KeyValue
지젤에스파
이마크엔시티드림
영훈더보이즈
로제블랙핑크

사심이 들어간 명단이기는 합니다만... 제가 말씀드린 사전과 같은 형태가 보이시나요? 왼쪽의 Key는 단어, 오른쪽의 Value는 단어의 뜻과 같이 보이지 않나요? 사실 이러한 형태가 딕셔너리에만 존재하지는 않습니다. 리스트와 튜플에서도 위 같은 형태가 존재하거든요.

IndexValue
0에스파
1엔시티드림
2더보이즈
3블랙핑크

리스트의 경우 이처럼 딕셔너리의 Key에 해당하는 부분이 index로, 숫자라는 점에서 딕셔너리와 다르죠. 여기서 궁금증이 드셔야 합니다. 리스트의 Value들에 숫자로 값을 매겨주는 Index가 딕셔너리에는 없는데, 딕셔너리에는 순서라는 게 없나? 숫자로 정해진 순서가 없으면 인덱싱, 슬라이싱도 못하나? 이런 의문들이요.

답변을 드리자면, 네 딕셔너리에는 순서가 없습니다. 순서가 없으니 당연히 위치에 따른 인덱싱, 슬라이싱도 불가능하죠. 대신 딕셔너리에는 Key라는 강력한 무기가 존재합니다. 딕셔너리에서 우리가 원하는 값, Value를 찾기 위해 우리는 Key를 사용할 수 있는 거죠. 즉, Key는 Value를 찾기 위한 이름표와도 같습니다.

딕셔너리의 특징

'Key는 Value를 찾기 위한 이름표'라는 점에서 우리는 Key의 특성을 유추해볼 수 있습니다. 먼저, Key는 Value를 찾기 위한 유일한 수단이기 때문에 중복되면 안 될 거에요. 또한, 이미 존재하는 Key가 변경될 경우 Value값을 찾는 데에 혼란을 줄 수 있기 때문에 변경되면 안 될 거에요. 정리하자면, 딕셔너리에서 Key의 특징은 아래와 같습니다.

  • Key는 고유해야 합니다.
  • Key는 변하지 않아야 합니다.

그렇다고 위 특징들이 절대적인 것은 아닙니다. 예컨대, Key값이 고유하지 않다고 해서, 즉 중복된다고 해서 에러가 나지는 않습니다. 다만 중복되는 Key 들이 서로 다른 Value를 가지고 있을텐데 Key를 통해 Value를 가져올 때 첫번째 Value만 가져오게 되죠. 이는 자연히 딕셔너리 자체에 대한 신뢰도의 하락으로 이어집니다. 이러한 이유로 Key는 중복되지 않는 것이 좋습니다.

Key는 변경되지 않아야 합니다. 다만 Value와 매치되는 Key를 바꾸고 싶은 상황은 충분히 있을 수 있습니다. 이 경우, 기존 Key:Value 데이터를 삭제하고 원하는 Key:Value 데이터를 새로 넣어줄 수는 있습니다. 딕셔너리는 순서가 존재하지 않기에, 단순한 삭제 및 추가시 데이터의 위치를 고려할 필요는 없습니다.

딕셔너리 생성

자, 그럼 딕셔너리를 어떻게 생성하는지에 대해 배워보겠습니다. 사실 감이 오실 것도 같아요. 앞서 리스트에서는 대괄호[], 튜플에서는 소괄호()를 사용했죠. 이번 딕셔너리에서는? 네 맞습니다, 중괄호{}를 사용한답니다. 다만 이후 배울 자료형 '집합' 역시 중괄호를 사용한답니다.

집합 자료형과 딕셔너리를 구분해주는 것은 콜론(:)의 존재입니다. 앞서 딕셔너리는 Key와 Value 세트의 모음이라고 했는데요, Key와 Value를 묶어주는 것이 바로 이 콜론(:)입니다. 실제 코드를 살펴볼까요?

dictionary = {'name':'조용주', 'mobile':'010-xxxx-xxxx', 'email':'mail@penielcho.com'}
KeyValue
namepeniel cho
mobile010-xxxx-xxxx
emailmail@penielcho.com

Key는 여러가지 조건이 붙기 때문에 그 값으로 올 수 있는 자료형이 제한되지만, Value의 경우 다양한 자료형을 품을 수 있습니다. 리스트는 그 대표적인 예입니다.

member_list = {'조용주':['중앙대학교', '사회학과', '코사다마', 4.2], '이정윤':['중앙대학교', '문헌정보학과', '코사다마', 4.5]}

Value에 리스트가 들어가니 어떤가요? 앞서 배운 딕셔너리들보다 훨씬 많은 정보가 담겨있죠. Key에는 이름이 있고, Value에는 순서대로 재학중인 대학교, 학과, 활동하고 있는 커뮤니티, 학점이 나와있으니까요. 자료형이 리스트이기 때문에 원한다면 훨씬 많은 정보를 넣을 수도 있을 거에요. 사실 이러한 형태가 딕셔너리가 사용되는 대표적 형태랍니다.

리스트는 이처럼 비교적 단순한 데이터(Key)와 복잡한 데이터(Value)가 짝을 이루는 경우, 또한 그 짝이 아주 많은 경우 사용된답니다. 기억해두시면 추후 적재적소에 딕셔너리를 사용하실 수 있을 거에요.

마지막으로 업데이트 된 날짜:
2022년 9월 24일