본문 바로가기

Python/Python 기초

딕셔너리 (dictionart), 맵(map)

파이썬에서 딕셔너리(dictionart)는 리스트와 튜플처럼 어떤 것들의 집합이다.(맵 (map) 이라고도 불린다.)


(만약 당신이 자료구조중 해쉬맵을 알고 있다면 바로 그것과 같은 개념이다.)


딕셔너리는 리스트와 같은 많은 값의 집합이지만


이 값을 얻어낼 때는 정수 인덱스(딕셔너리에서 인덱스는 키(key)라고 한다)가 아니라 특정 데이터 타입의


인덱스를 쓸 수 있다 (하지만 대부분의 경우 문자열을 사용한다).


1
stuff = {'hello':'Hello there, how are you?','chat':'How is the weather?','goodbye':'It was nice talking to you!'}


딕셔너리에서는 [] 대신 {} 를 사용한다. 파이썬에서 딕셔너리 값을 말할 때는 {}를 사용한다.


{}안에 키 - 값 쌍을 입력한다.


키는 콜론 왼쪽에 오고, 값은 콜론 오른쪽에 온다. 딕셔너리에서 값을 얻을 때는 (리스트에서 아이템을 얻을 때와 같다.) 키(리스트의 인덱스와 같다)를 사용한다.


stuff['hello'], stuff['chat'], stuff['goobye'] 등을 입력해서 아이템을 참조한다.





딕셔너리와 리스트의 차이점

딕셔너리는 리스트와 다른데 가장 큰 차이점은 순서대로 정렬되어 있지 않다는 점이다.

리스트의 첫 번째 아이템은 list[0] 이지만  딕셔너리에는 첫 번째 아이템이라는 것이 없다.

딕셔너리에는 순서를 정할 방법이 없기 때문이다.


1
2
3
4
>>> favorites1 = {'fruit':'apples','number':42,'animal':'cat'}
>>> favorites2 = {'animal':'cat','number':42,'fruit':'apples'}
>>> favorites1 == favorites2
True

위 코드를 보듯이 favorites1 == favorites2 는 True가 되는데 딕셔너리는 순서대로 정렬하지 않기 때문이다.

다만 동일한 키 - 값 쌍이 있으면 같은 것으로 본다.



1
2
3
4
>>> listFavs1 = ['apples','cats',42]
>>> listFavs2 = ['cats',42,'apples']
>>> listFavs1 == listFavs2
False

리스트는 순서가 있으므로 비록 값은 다 있어도 순서가 다르면 같은 게 아니다.

listFavs1과 listFavs2는 다른데 리스트에서는 순서가 중요하기 때문이다.




딕셔너리에서는 정수를 키로 슬 수 있다.

딕셔너리는 문자열 외에도 어떤 데이터 타입이라도 키로 쓸 수 있다.

0과 '0'은 다른 값이며 따라서 서로 다른 키임을 주의하자. 다음을 셸에서 수행해 보자.


1
2
3
4
5
6
>>> spam = {'0':'a string',0:'an integer'}
>>> spam[0]
'an integer'
>>> spam['0']
'a string'
>>> 



딕셔너리에 정수 인덱스가 없으므로 for문을 쓰기 어려울 것이라고 생각할 수 있다. 하지만 매우 쉽다.

다음을 셸에서 수행해보다


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
>>> favorites = {'ftuit':'apples', 'animal':'cats','number':42}
>>> for i in favorites:
	print(i)

animal
number
ftuit
>>> 
>>> for i in favorites:
	print(favorites[i])

cats
42
apples
>>> 

for 문에서 딕셔너리를 사용하면 변수 i는 딕셔너리의 키 값을 받게 된다.

하지만 딕셔너리는 순서대로 되어 있지 않으므로, for문에서 다음에 어떤 값에 대해 수행하게 될지 예상할 수 없다.



딕셔너리에는 2개의 메서드 keys()와 values()가 있다. 이 메서드는 각각 dick_keys 타입가 dick_values 타입의 값을 반환하는데.

이 데이터 타입에 대한 설명은 현재 진도 수준을 넘어가므로 생략하도록하고, 이 값은 list()함수로 쉽게 리스트로 바꿀 수 있다.

그러고 나면 순서대로 정렬된 키 값의 리스트를 얻을 수 있고, 딕셔너리 값도 마찬가지다. 다음을 셀에서 수행해 보자.


1
2
3
4
5
6
>>> favorites = {'ftuit':'apples', 'animal':'cats','number':42}
>>> list(favorites.keys())
['animal', 'number', 'ftuit']
>>> list(favorites.values())
['cats', 42, 'apples']
>>> 


이 메소드를 써서 딕셔너리의 키와 값의 리스트를 얻을 수 있다. keys()와 values()의 반환 값을 list()함수를 써서

리스트로 변환해야 함을 잊으면 안 된다. 그렇지 않으면 프로그램에서 에러가 발생한다.



딕셔너리에 리스트를 넣을 수 있다.


1
2
3
4
5
6
7
8

words = {'Colors':'red orange yellow green blue indigo violet white black brown'.split(), 'Shapes':'squate triangle rectangle circle ellipse rhombus trapazoid chev-ron pentagon hexagon septagon octagon'.split(), 'Fruits':'apples orange lemon lime pear watermelon grape grapefruit cherry banana cantaloupe mango strawberry tomato'.split(), 'Animals':'bat bear beaver cat cougar crab deer dog donkey duck eagle fish frog goat leech lion lizard monkey moose mouse otter owl panda python \ rab-bit rat shark sheep skunk squid tiger turkey turtle weasel whale wolf wombat zebra'.split()}



len() 으로 딕셔너리의 크기를 알 수 있다. (키-값 쌍이 몇개 있는지 알 수 있다.)








'Python > Python 기초' 카테고리의 다른 글

리스트 레퍼런스 (List References)  (0) 2014.09.25
다중 대입 (Multiple assignment)  (0) 2014.09.24
리스트 (list) 와 문자열의 메서드  (0) 2014.09.18
파이썬의 상수와 관행  (0) 2014.09.18
다중 라인 문자열  (0) 2014.09.18