파이썬(python) – 딕셔너리(Dictionary) : 해쉬테이블(Hash Table)

이번 시간에는 dictionary 에 대해 공부해 보겠습니다.

dictionary 는 hash table 이라고 보시면 되겠습니다.
어떤 key 와 value 를 함께 element 로 삽입을 한 후, 향후 그 value 가 필요할 때는 key 를 이용하여
빠르게 검색하기 위한 것입니다. dictionary 를 표현할 때는 중괄호('{}') 를 사용합니다.

List 나 tuple 과는 key 가 있다는 점에서만 개념이 약간 다르겠죠.
key 가 필수이기 때문에 삽입 시와 검색 시에 key 가 필수로 주어져야 합니다.
너무 당연한 말인가요? ^^

# dictionary 변수 선언 (필수)
>>> d = {}                                       

# 'a' 라는 key 로 'alpha' 라는 value 삽입
>>> d['a'] = 'alpha'                              

# 'o' 라는 key 로 'omega' 라는 value 삽입
>>> d['o'] = 'omega'
>>> d['g'] = 'gamma'

# key 와 value 를 : 로 연결하여 list 로 보여줌.
>>> d
{'a': 'alpha', 'g': 'gamma', 'o': 'omega'}

# dictionary 에서 'a' key 로 저장된 value 검색
>>> d['a']
'alpha'

# dictionary 에서 'x' key 로 저장된 value 검색
>>> d['x']                                         

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'x'

# 반드시 key 를 주어야 검색 가능, list 처럼 index 를 주면 안됨.
>>> d[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 0

여러분은 사실 list 의 개념만 명확히 알고 계시면 tuple 과 dictionary 등의 추가적인 데이터형은 아주 손쉽게 이용법 및 개념을 간파할 수 있습니다.
이용법은 dir 과 help 만 있으면 됩니다.
그리고, 데이터형의 특징을 파악하는 것도 아주 쉽습니다.
예를 들어, 위에서 d 라는 dictionary 를 선언하고 값을 삽입한 후 d 의 결과를 보면 아래와 같이 중괄호를 사용한 것을 볼 수 있습니다.

{'a': 'alpha', 'g': 'gamma', 'o': 'omega'}

list 는 대괄호 [], tuple 은 소괄호 ()를 사용하죠.
즉, 어떤 연산의 결과나 함수 수행의 결과를 볼 때 데이터들이 어떤 괄호로 묶여있느냐만 보아도 그 결과의 타입 뿐 아니라 그를 이용하여 다른 연산을 어떻게 수행해야할지를 미리 짐작할 수 있습니다.
데이터형에 따라서 할 수 있는 연산들이 다르니까요. 어떤 연산이 가능한지는 dir 을 보면 되구요. ^^
dir 이 만능이군요. ㅎㅎ

>>> dir(d)

['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']

# d['x']와는 다르게 오류를 내뱉지 않는다.
>>> d.get('x')            

# 'a' key 를 이용하여 value 검색
>>> d.get('a')
'alpha'

# 'a' key 가 d dictionary 에 존재하는가?
>>> 'a' in d
True
>>> 'x' in d
False
>>>

# dictionary d 에 있는 key 를 list 로 리턴 (정렬된 결과는 아님)
>>> d.keys()
['a', 'g', 'o']

# dictionary d 에 있는 value 를 list 로 리턴
>>> d.values()           
['alpha', 'gamma', 'omega']

# key list 를 정렬해서 하나씩 print
>>> for k in sorted(d.keys()): print 'key:', k, '->', d[k]
...
key: a -> alpha
key: g -> gamma
key: o -> omega

# items 함수는 key 와 value 를 tuple 로 묶은 결과를 list 로 리턴함.
>>> d.items()
[('a', 'alpha'), ('g', 'gamma'), ('o', 'omega')]

# d.items() 의 element 하나하나는 tuple 이라는 것 명심
>>> for tuple in d.items(): print tuple
...
('a', 'alpha')
('g', 'gamma')
('o', 'omega')

시험한 것을 보니 무척 쉽죠 ? dictionary 는 key 를 이용하여 검색하기 때문에 속도도 굉장히 빠릅니다.

여러분은 사실, dir/help 명령어와 괄호들([], {}, ()), 그리고 몇몇의 내장 함수 및 Coding Rule 만 알면 python 을 가지고 웬만한 프로그램은 만들 수 있습니다.
python 은 참 대단한 언어인 것 같습니다.
제가 사용해보니 python 은 객체에 대한 개념만 머리속에 가지고 있으면 금방 그 사용법들을 익힐 수 있습니다.

다음 시간부터는 python 에서 file 을 어떻게 다루는지에 대해 공부하도록 하겠습니다.

You may also like...

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x