IT

[파이썬 기초] 자료구조(3) - 딕셔너리

생각파워 2018. 12. 5. 16:21

파이썬 대표 자료구조의 하나인 딕셔너리를 살펴보자.

문자열과 리스트의 경우는 자료가 순차적으로 구성되어 있다.

그렇기때문에 오프셋을 이용해서 각 항목에 접근할 수 있었다. 

>>> t_list = ['a','b','c']
>>> t_list
['a', 'b', 'c']
>>> t_list[0]
'a'
>>> t_list[1]
'b' 

 

이런 방식은 특정 항목을 찾고자 할때 문제가 될 수 있다.

내가 'a'라는 값을 찾고 싶을때는 전체 리스트를 다 뒤져봐야 찾을 수 있다.

리스트가 몇개 안된다면 상관없겠지만, 그 수가 많아진다면 많은 시간이 소요될 수 있다.

 

특정값을 딱!하고 찾고 싶을때는 딕셔너리가 좋은 방안이 될 수 있다.

딕셔너리는 키와 값을 한쌍으로 항목을 관리한다.

그래서 키값을 알고 있으면 항목을 바로 찾을 수 있다. 

>>> t_dict = {'a':'a항목','b':'b항목','c':'c항목'}
>>> t_dict
{'a': 'a항목', 'b': 'b항목', 'c': 'c항목'} 
>>> t_dict['a']
'a항목'

 

해당 키로 가져오는 값이 하나여야 하기 때문에 동일한 키를 이용해서 값을 저장할 순 없다.

딕셔너리에서 키는 유일해야 한다.

그렇기 때문에 예외가 발생... 할 줄 알았는데, 예외는 안생기고, 그냥 최종값이 업데이트 된다.

>>> t_dict = {'a':'a항목','b':'b항목','c':'c항목','c':'d항목'}     # 키 'c'를 두번입력
>>> t_dict
{'a': 'a항목', 'b': 'b항목', 'c': 'd항목'}                        # 마지막 'c'값만 남음                          

 

좀 더 세부적으로 살펴보자.

 

1. 딕셔너리 생성하기

딕셔너리를 생성하는 방법은 두가지가 있다. 

중괄호({})를 이용하는 방법과 dict()함수를 이용하는 방법이다.

중괄호를 이용하는 방법은 중괄호 사이에 키와 값을 '키:값'과같이 매핑시켜주면 된다.

각 항목은 콤마(,)로 구분하면 된다. 

t_dict = {'a':'a항목','b':'b항목','c':'c항목'} 

 

dict() 함수를 이용하는 방법은 변수를 딕셔너리 변수로 지정 한 후, 키에 값을 할당에 주면 된다. 

>>> t_dict2 = dict()
>>> t_dict2['MON'] = 'monday'
>>> t_dict2
{'MON': 'monday'} 

 

또, 기존에 이미 만들어진 리스트나 튜플 등을 이용해 딕셔너리를 만들때 유용하다.

>>> letters_tuple = ('ab','cd','ef')         # 'ab'를 키:값으로 구분. 'a':'b'
>>> letters_dict = dict(letters_tuple)       
>>> letters_dict
{'a': 'b', 'c': 'd', 'e': 'f'} 


>>> t_list = [('a','b'),('c','d'),('e','f')] # 각 항목이 튜플로 된 리스트도 딕셔너리로 변경가능
>>> t_dict = dict(t_list)
>>> t_dict
{'a': 'b', 'c': 'd', 'e': 'f'}

 

2. 항목 조회 및 추가/변경

딕셔너리 항목을 조회할 때는 '딕셔너리명[키]'로 접근을 하면 값을 바로 가져올 수 있다.

추가/변경시에는 '딕셔너리명[키] = 값'을 할당하면된다.

딕셔너리에 키가 존재할 경우 해당 키에 대한 값이 변경되며,

키가 존재하지 않으면 키와 값이 추가된다.

>>> t_dict['a']                              # 키를 이용한 항목 조회
'b'


>>> t_dict['a'] = 100                        # 'a'키가 존재하기 때문에 'a'키에 대한 값이 변경
>>> t_dict
{'a': 100, 'c': 'd', 'e': 'f'}


>>> t_dict['g'] = 200                        # 'g'키가 존재하지 않기때문에 'g':200 항목 추가
>>> t_dict
{'a': 100, 'c': 'd', 'e': 'f', 'g': 200} 

 

3. 항목 삭제

딕셔너리의 특정 항목을 삭제하고 싶을 때는 del 명령어를 사용한다.

모든 항목을 삭제하고 싶을 때는 clear() 메서드를 사용한다.

>>> t_dict
{'a': 100, 'c': 'd', 'e': 'f', 'g': 200}


>>> del t_dict['g']                         
>>> t_dict
{'a': 100, 'c': 'd', 'e': 'f'} 


>>> t_dict.clear()                           # 모든 항목이 깔끔하게 삭제
>>> t_dict
{}

 

4. 다른 두 딕셔너리 결합

update() 메서드를 사용하면 다른 딕셔너리를 현재 딕셔너리로 결합할 수 있다.

만일 두 딕셔너리에 중복된 키가 있다면, 두번째 딕셔너리 값이 저장된다.

>>> t_dict
{'a': 100, 'c': 'd', 'e': 'f'}
>>> x_dict
{'x': 'y', 'a': '300'}
>>> t_dict.update(x_dict)
>>> t_dict
{'a': '300', 'c': 'd', 'e': 'f', 'x': 'y'}    # 'a'키가 중복되어 두번째 딕셔너리 값 '300'이 입력됨    

 

5. in을 이용한 항목검사

리스트에서도 in을 이용해서 항목검사를 했었다.

딕셔너리에서도 항목검사가 가능하다. 단, 키에 대해서만 항목검사가 가능하다.

값은 in을 이용해 항목검사를 할 수 없다.

>>> t_dict = {'a':100, 'c':'d', 'e':'f'}
>>> 'a' in t_dict                            # 'a'키가 존재하는지 확인
True
>>> 100 in t_dict                            # 100이 존재하는지 확인. 값은 확인 불가
False
>>> 'd' in t_dict                            # 'c'키의 값인 'd'도 존재하지 않는다고 나옴
False 

 

6. 모든 키 얻기

딕셔너리에 존재하는 모든 키와 값을 동시에 얻을 수 있다. 물론 키와 갚을 함께 얻을 수도 있다.

keys() 는 모든 키를, values()는 모든 값을, items()는 모든 키와 값을 쌍으로 리턴해 준다.

>>> t_dict.keys()
dict_keys(['a', 'c', 'e'])
>>> t_dict.values()
dict_values([100, 'd', 'f'])
>>> t_dict.items()
dict_items([('a', 100), ('c', 'd'), ('e', 'f')]) 

 

딕셔너리는 가장 많이 사용되는 자료구조인만큼 사용법을 확실하게 익혀두는것이 좋다.

 

 

 

 

 

 

 

반응형