본문 바로가기

파이썬

04/28 파이썬 6 - 튜플과 딕셔너리

파이썬의 기본 자료구조

 

파이썬의 기본 자료구조에는 리스트(list), 튜플(tuple), 딕셔너리(dictionary)가 있다.

 

이 세 가지의 차이점과 쓰임을 알아보자.

 

1) 튜플 (tuple)

 

튜플과 리스트는 다음과 같은 차이점이 있다.

 

  • 리스트는 '[' 와 ']'를 사용하는 반면 튜플은 '('와 ')'를 사용한다.
  • 리스트는 리스트 내의 원소를 수정할 수 있지만 튜플은 수정할 수 없다.

리스트는 튜플의 기능을 모두 포함하는 반면 튜플은 리스트가 가지고 있는 몇 가지 기능이 빠져있다.

 

여기까지만 보면 튜플을 사용할 이유가 없는 것 같다.

그러나 튜플의 진정한 면모는 "속도"에서 드러난다.

 

튜플은 리스트에 비해 기능이 없는대신 속도가 빠르다는 장점이 있다. 그래서 데이터를 수정할 필요가 없는 경우에는 튜플에 넣는 것이 좋다.

 

>>>mygame = ('롤', '오버워치', '배틀그라운드')
>>>mygame
('롤', '오버워치', '배틀그라운드')
>>>

 

위 코드는 튜플을 만들어본 예시이다.

 

>>> len(mygame)
3
>>> mygame[0]
'롤'
>>> mygame[1]
'오버워치'
>>> mygame[2]
'배틀그라운드'
>>> mygame[0] = '로스트아크'
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    mygame[0] = '로스트아크'
TypeError: 'tuple' object does not support item assignment
>>> 

 

위 코드처럼 튜플은 리스트처럼 len이라는 내장 함수를 통해 튜플의 원소의 개수를 확인할 수도 있고, [0], [1], [2] 인덱싱을 통해 튜플의 각 원소에 접근할 수도 있다.

하지만 튜플은 리스트와 달리 원소를 수정할 수 없으므로, 마지막 줄 코드처럼 원소를 수정하려고 하면 에러가 발생하는 것을 볼 수 있다.

 

2) 딕셔너리(dictionary)

 

dictionary는 '사전'이라는 뜻을 가지고 있다. 사전은 어떠한 단어에 대한 정의가 나와있는데, 파이썬의 딕셔너리도 이와 비슷하게 키(key)와 값(value)이라는 것을 쌍으로 저장함으로써 사전처럼 데이터를 쉽게 불러올 수 있는 구조이다.

 

예시를 들어보자면, 내가 지금 음식별로 가격을 저장해야 한다. 하지만 리스트나 튜플로 이를 쉽게 표현하기가 불가능하다. 리스트나 튜플은 순서대로 값을 하나씩 저장하기 때문이다.

 

이때, 딕셔너리를 사용하면 정말 쉽게 음식 가격표를 구현할 수 있다.

 

딕셔너리를 이용해서 가격표를 만들어보자.

 

>>>food_price = {}
>>>

 

딕셔너리는 리스트와 튜플과는 다르게 '{' 와 '}'를 사용한다. 위와 같이 코드를 작성하면 빈 딕셔너리가 생성된다.

 

원소를 넣어 가격표를 완성해보자.

 

>>>food_price['짜장면'] = 5000
>>>food_price['짬뽕'] = 6000
>>>

 

짜장면의 가격과 짬뽕의 가격을 추가했다. 여기서 "짜장면"과 "짬뽕"은 키(key)이고, 5000과 6000은 값(value)이다.

 

이제 딕셔너리가 잘 완성됐는지 확인해보자.

 

>>>food_price
{'짜장면': 5000, '짬뽕': 6000}
>>>

 

딕셔너리도 리스트와 마찬가지로 딕셔너리를 바인딩하고 있는 변수명을 입력하면 딕셔너리에 저장된 값을 볼 수 있다.

 

>>>food_price['짜장면']
5000
>>>

 

만약 딕셔너리에 저장된 어떠한 키에 대한 값을 구하고 싶다면 위와 같이 입력하면 값을 알 수 있다.

여기서 중요한 것은 딕셔너리는 리스트, 튜플과는 달리 데이터에 순서가 없다는 점이다.

따라서 인덱싱을 통해 정보를 불러 올 수 없다.

 

>>>food_price2 = {'짜장면': 5000, '짬뽕': 6000, '탕수육': 12000}
>>>food_price2
{'짜장면': 5000, '짬뽕': 6000, '탕수육': 12000}
>>>

 

참고로 딕셔너리는 위와 같은 방법으로 여러 개의 데이터로 한 번에 딕셔너리를 생성할 수 있다.

 

>>>del food_price2['탕수육']
>>>food_price2
{'짜장면': 5000, '짬뽕': 6000}
>>>

 

딕셔너리에서 어떠한 데이터를 삭제하고 싶다면 del과 키를 사용하면 된다.

 

>>> food_price2.keys()
dict_keys(['짜장면', '짬뽕', '탕수육'])
>>> food_price2.values()
dict_values([5000, 6000, 12000])
>>> 

 

만약에 딕셔너리 안의 키와 값을 한 번에 보고싶다면 위와 같이 keys 메서드와 values 메서드를 사용하면 된다.

위 코드를 자세히 살펴보면 각 코드에 대한 반환 값 앞에 'dict_keys'와 'dict_values'가 있는데, 이것은 리스트가 아니므로 키와 값을 리스트에 넣어 알아보고 싶다면 list라는 키워드를 사용해 타입을 변환해야 한다.

 

>>> list(food_price2.keys())
['짜장면', '짬뽕', '탕수육']
>>> list(food_price2.values())
[5000, 6000, 12000]
>>> 

 

 

list로 타입을 변환한 모습이다. 위 리스트에 변수를 바인딩하면 보다 간편하게 리스트를 불러올 수 있다.

 

 

>>> '짜장면' in food_price2.keys()
True
>>> '팔보채' in food_price2.keys()
False
>>> 

 

만약 딕셔너리 안에 어떤 키(key)가 있었는지 없었는지 헷갈린다면, 위와 같이 in이라는 키워드와 keys 메서드의 반환값을 이용하여 쉽게 알 수 있다. 키뿐만이 아니라 값(value)도 마찬가지의 방법으로 알 수 있다.