TigerCow.Door


안녕하세요. 이번 포스팅에서는 딕셔너리 자료형에 대해서 살펴보도록 하겠습니다.


1. 딕셔너리 자료형


세상에서는 많은 대응 관계를 갖는 단어들이 있습니다. 사람을 예로 들면, "이름" = "홍길동", "생일" = "5월15일" 이런식으로 말이죠. 파이썬에서는 이러한 대응 관계를 표현하기 위해 딕셔너리(Dictionary) 자료형이 존재합니다.

다른 개발 부분에서는 연관 배열(Associative array), 해시(Hash) 라고도 부릅니다.

파이썬에서 이야기하는 딕셔너리 자료형은 말 그대로 사전과 같은 자료형 입니다. 즉, 이름에는 홍길동이, 생일에는 5월15일이 대응 되듯이 파이썬에서는 Key 와 Value가 대응됩니다.

딕셔너리 자료형에서는 앞에서 살펴본 리스트나 튜플과 달리 순차적으로 요소 값을 구하지 않고 Key에 대응되는 Value값을 얻습니다. 


이러한 딕셔너리의 기본적인 모습은 다음과 같습니다.


{Key1:Value1, Key2:Value2, Key3:Value3, ... }


Key와 Value의 여러 개의 대응 관계가 {와 }로 둘러싸여 있습니다. 각각의 요소는 Key와 Value가 대응되는, Key : Value 형식으로 되어 있으며 쉼표로 각각의 요소가 분리됩니다.


실제로 만들어보면 다음과 같습니다.



위의 dic1에서 Key는 'name', 'number', 'score' 이고 Value는 'hong', '01012345678', '58' 입니다.

또한 value에는 정수형을 비롯한 리스트 자료형을 넣을 수도 있습니다.




2. 딕셔너리 추가 및 삭제하기


먼저 위에서 언급하였듯이, 딕셔너리에서는 리스트나 튜플 자료형과 다르게 순서를 따지지 않습니다. 딕셔너리에서는 무엇이 추가되고 어떤 요소가 Key, Value로 존재하는지를 중요시합니다.


먼저 딕셔너리에 요소를 추가하는 기본 형태입니다.


dic[Key] = Value


위의 기본 상태에 따라서 딕셔너리에 요소를 추가해보겠습니다.



이번에는 딕셔너리에서 요소를 삭제하는 방법입니다.


del dic[Key]


이러한 형태를 입력하면 dic이라는 딕셔너리 자료형에서 일치하는 Key값과 Value값을 제거합니다.




3. 딕셔너리 사용하기


그럼 이러한 딕셔너리는 어디에서 사용될까요?

만약 딕셔너리가 없다고 했을 때, 5명의 이름에 대한 핸드폰 번호를 저장하는 것은 어떻게 구현해야 할까요?

깔끔하게 특정한 방법이 잘 생각나지 않습니다.

하지만 우리에게는 딕셔너리 자료형이 있기에 다음과 같이 표현할 수 있습니다.



그럼 이러한 phone_number 딕셔너리에서 person2의 핸드폰 번호를 알고 싶을땐 어떻게 할까요?

딕셔너리에서 Key를 사용하여 Value를 얻는 방법은 다음과 같습니다.



위의 사진과 같이, <딕셔너리이름>[Key] 와 같이 입력하면 해당 딕셔너리에서 Key에 대응되는 Value를 반환합니다.



4. 딕셔너리 주의사항


딕셔너리 자료형을 만들때는 몇가지 주의사항이 있습니다.

먼저, Key의 중복을 피해야 합니다.

Key를 중복으로 입력해도 오류는 발생하지 않지만 중복된 Key 중 1개를 제외한 나머지 모든 Key:Value는 무시됩니다.



두번째는 딕셔너리의 Key에 리스트를 사용하지 못하는 점입니다. 

위에서 리스트 자료형 또한 Value에 입력될 수 있다고 하였지만, Key에는 이용하지 못합니다. 딕셔너리 자료형에서 Key로 쓸 수 있는지 없는지에 대한 기준은 Key가 변하는 값인지 변하지 않는 값인지에 달려 있습니다. 지난 포스팅에서 살펴보았듯이 리스트는 변할 수 있는 자료형입니다. 따라서 리스트 자료형은 Key로써 사용하지 못합니다. 반면에 튜플 자료형은 변하지 않는 값이기에 Key로 사용될 수 있습니다.



이렇게 해서 딕셔너리 자료형에 대해서 알아보았습니다.

다음 포스팅에서는 딕셔너리 자료형에 관련된 함수들에 대해서 알아보도록 하겠습니다.



블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요