본문 바로가기
Tech Stack/Python

튜플 & 딕셔너리

by jaeaemin 2021. 7. 20.

튜플 ( Tuple )

 

- ( ) 으로 둘러 싼 후 선언한다.

- 리스트는 그 값의 생성, 삭제, 수정이 가능한 mutable객체고, 반대로 튜플은 변경 가능한 객체로 immutable객체이다.

>>> t1 = ()
>>> t2 = (1,)
>>> t3 = 1, 2, 3
>>> t4 = ('a', 'b', ('ab', 'cd'))

 

선언 부분에서 튜플은 리스트와 비슷한 모습을 띄고 있지만, 2가지 차이점을 보인다.  

1. t2에서 처럼 하나의 요소를 가지는 튜플은 요소 뒤애 반드시 콤마(,)를 붙여야 한다.

2. t3처럼 괄호를 생략해도 튜플로 인식되어 변수에 저장된다.

 

리스트와 튜플의 구별되는 가장 큰 특징은 값의 변화가 가능하냐 불가능하냐이다. 즉 리스트의 항목 값은 변경 가능하고, 튜플의 항목 값은 변경이 불가능하다. 실제 프로그램에서는 값이 변경되는 형태의 변수가 훨씬 많이 사용되기 때문에 튜플보다는 리스트를 많이 사용하는 편이다.

튜플의 요소값을 삭제하거나 변경하려하면 TyepError가 발생한다. 

 

튜플은 immutable 객체인 점만 제외하면 리스트와 비슷하게 수행되기 때문에 이전 포스팅에서 리스트의 문법들을 모두 가지고 있다. 

인덱싱 >>> t1 = (1, 2, 'h', 'i')
>>> t1[0]
1
>>> t1[3]
'i'
슬라이싱  >>> t1[1:] 
(2, 'h', 'i') 
튜플 연산  >>> t2 = (3, 4, 'b', 'ye') 

>>> t1 + t2       // 더하기

(1, 2, 'h', 'i', 3, 4, 'b', 'ye') ) 

>>> t1 * 2        // 곱하기
(2, 'h', 'i'2, 'h', 'i') 

튜플 길이 반환 >>> len(t1)
4

 

 

 

 

 

딕셔너리 (dictionary)

 

key 값과 value값을 연관지어 1대1 매핑하여 저장한 배열 형태를 연관 배열(Associative array) 또는 해시(hash)라고 한다.

파이썬에서는 이러한 자료형을 딕셔너리(Dictionary)라고 명명하고 Key와 Value를 한 쌍으로 갖는 자료형으로 정의했다.

딕셔너리는 이전에 살펴본 리스트나 튜플처럼 순차적으로 정의된 인덱스에 의해 요소값을 판별하는 것이 아닌 Key라는 특정 값을 통해서 Value를 얻는 특징을 가지고 있다. 

 

 

- { } 으로 둘러싼 후 선언한다.    형식.  :   { Key1 : Value1, Key2 : Value2, Key3 : Value3 , ... }

Key는 변하지 않는 값을 사용하고, Value는 수정 가능한 변수이다. 

예시를 들어보자 

>>> my_info = {'name':'한재민', 'phone':'01093955610', 'birth': [1998,01,13]}

my_info라는 딕셔너리 변수를 선언하고 현재 나의 정보를 넣었다. 여기서 Key는 name, phone, number 이고, Key에 해당하는 각 Value는 Key뒤에 선언된 내 정보들이다. 

이 때 value는 자료형을 통일 시킬 필요 없이 birth와 마찬가지로 리스트를 사용하여 value값으로 선언할 수도 있다.

 

 

 

- 딕셔너리에서는 mutable객체로 쌍을 추가하거나 제거하는 것이 가능하다 

쌍 추가하기 >>> a = {1: '진'}
>>> a[2] = '구'
>>> a
{
1: '진', 2: '구'}
>>> a['my_pet'] = 'dog'
>>> a
{
1: '진', 2: '구', 'my_pet': 'dog'}
쌍 제거하기 >>> del a[2]
>>> a {1: '진', 'my_pet': 'dog'}

 

 

 

- 딕셔너리는 Key값을 사용해서 Value에 대해 검색이 가능하다.

>>> jingoo = {'age': 11, 'color': 'black' }
>>> grade['age']
11 
>>> grade['color']
'black'

 

리스트나 튜플, 문자열은 요소 값을 알아내기 위해 인덱싱이나 슬라이싱 기법 중 하나를 사용하여 index 번호를 기준으로 검색했다면, 딕셔너리는 오직 Key값을 이용하여 검색한다.

위에서 예시로 든 my_info같은 경우데도 ['key']를 통해서 검색 할 수 있고 내 my_info['name']으로 '한재민'이라는 value값을 알아 낼 수 있다.

 

 

 

-딕셔너리의 Key값은 고유한 값으로 중복되는 Key값의 설정 시 하나를 제외한 다른 중복 Key는 무시된다.

>>> a = {1:'hi', 1:'hello'}
>>> a
{
1: 'hello'}

 

 

 

- Key값은 Value를 나타내는 고유한 값으로 리스트가 올 수 없다.

 

 

 

 

딕셔너리에 주로 사용되는 함수

keys  Key들로만 이루어진 리스트를 만든다
>>> my_info = {'name':'한재민', 'phone':'01093955610', 'birth': [1998,01,13]}
>>> my_info.keys()
my_info.keys(['name', 'phone', 'birth'])
values Value들로만 이루어진 리스트를 만든다.
>>> my_info.values()
my_info.values(['한재민', '01093955610', [1998,01,13] ])
items key와 value를 쌍으로 얻는다.
>>>
my_info.items()
dict_items([(
'name', '한재민'), ('phone', '01093955610'), ('birth', [1998,01,13] ])
clear 딕셔너리 안의 모든 요소를 삭제한다.
>>> my_info.clear()
>>> my_info
[ ]
get Key를 인수로 사용하여 Value값을 반환받는다.
>>> my_info = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> my_info.get('name')
'한재민'
>>> my_info.get('birth')
[1998,01,13]

설정되지 않는 Key의 경우는 오류를 발생시키고 None값을 반환한다. 이때 default 반환값을 설정하기 위해서는
>>> my_info.get('age', '24')
'24'
in 해당 key가 딕셔너리 안에 있는지를 조사한다.
>>> 'name' in my_info
True
>>> 'age' in my_info
False

 

파이썬 3.0이전 버전까지는 a.key()의 반환값을 dict_key 객체가 아닌 리스트로 반환했다. 이 때 리스트를 사용하면 메모리 낭비가 발생하는데 파이썬 3.0 이후 버전에서는 이런 메모리 낭비를 줄이기 위해 따로 dict_keys 객체를 사용해서 반환하기 시작했다.

dict_values, dice_items역시 위와 같은 이유에서 만들어졌다. 만약 이 객체를 리스트로 변환해야한다면, list(my_info.key())를 사용하여 리스트로 변환할 수 있다. 

dict_***객체는 기본적인 반복 (iterate) 구문을 지원 가능하다. (ex) for i in my_info.key():

반응형

'Tech Stack > Python' 카테고리의 다른 글

파일  (0) 2021.07.27
함수  (0) 2021.07.26
반복문 ( for , while )  (0) 2021.07.24
집합 & 불 자료형  (0) 2021.07.21
문자열 & 리스트  (0) 2021.07.20