728x90

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

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

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

>>> d = {}                                          # dictionary 변수 선언 (필수)
>>> d['a'] = 'alpha'                              # 'a' 라는 key 로 'alpha' 라는 value 삽입
>>> d['o'] = 'omega'                             # 'o' 라는 key 로 'omega' 라는 value 삽입
>>> d['g'] = 'gamma'
>>> d                                                  # key 와 value 를 : 로 연결하여 list 로 보여줌.
{'a': 'alpha', 'g': 'gamma', 'o': 'omega'}
>>> d['a']                                           # dictionary 에서 'a' key 로 저장된 value 검색
'alpha'
>>> d['x']                                           # dictionary 에서 'x' key 로 저장된 value 검색
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'x'
>>> d[0]                                             # 반드시 key 를 주어야 검색 가능, list 처럼 index 를 주면 안됨.
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.get('x')             # d['x']와는 다르게 오류를 내뱉지 않는다.
>>> d.get('a')             # 'a' key 를 이용하여 value 검색
'alpha'
>>> 'a' in d                # 'a' key 가 d dictionary 에 존재하는가?
True
>>> 'x' in d
False
>>> 
>>> d.keys()              # dictionary d 에 있는 key 를 list 로 리턴 (정렬된 결과는 아님)
['a', 'g', 'o']
>>> d.values()           # dictionary d 에 있는 value 를 list 로 리턴
['alpha', 'gamma', 'omega']
>>> for k in sorted(d.keys()): print 'key:', k, '->', d[k]  # key list 를 정렬해서 하나씩 print
... 
key: a -> alpha
key: g -> gamma
key: o -> omega
>>> d.items()              # items 함수는 key 와 value 를 tuple 로 묶은 결과를 list 로 리턴함.
[('a', 'alpha'), ('g', 'gamma'), ('o', 'omega')]
>>> for tuple in d.items(): print tuple   # d.items() 의 element 하나하나는 tuple 이라는 것 명심
... 
('a', 'alpha')
('g', 'gamma')
('o', 'omega')

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


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

 

출처 : http://cloudrain21.tistory.com/entry/파이썬python-딕셔너리Dictionary-해쉬테이블Hash-Table

728x90

'Python' 카테고리의 다른 글

python regular expressions  (0) 2014.05.02
python file  (0) 2014.05.02
python tuple  (0) 2014.05.02
python list sorting  (0) 2014.05.02
python list2  (0) 2014.05.02

+ Recent posts