본문 바로가기
프로그래밍/파이썬 공부하기

Python 공부하기 - 5 (딕셔너리, 튜플)

by _OlZl 2024. 1. 27.

2024.01.26 - [프로그래밍/파이썬 공부하기] - Python 공부하기 - 4 (리스트)

 

Python 공부하기 - 4 (리스트)

2024.01.24 - [프로그래밍/파이썬 공부하기] - Python 공부 - 3 (클래스, 메서드, 인스턴스, 객체, 속성) Python 공부 - 3 (클래스, 메서드, 인스턴스, 객체, 속성) 2024.01.23 - [프로그래밍/파이썬 공부하기] - Py

olzl07.tistory.com

이전에는 리스트와 관련 함수들에 대해 공부했습니다. 이번 시간에는 리스트 외의 이터러블인 딕셔너리, 튜플에 대해 공부해 보겠습니다.


딕셔너리 (Dictionary)

딕셔너리란 키(key)와 값(value)이 한 쌍의 대응 관계로 저장되어 있는 자료형입니다. 예를 들어 이름 : "_OlZl", 나이 : "18" 등 하나의 대응되는 관계로 정보들을 저장하는 것입니다.

 

딕셔너리의 기본 모습은 다음과 같습니다.

{Key1: Value1, Key2: Value2, Key3: Value3, Key4: Value4...}

이렇게 key와 value들이 콜론으로 구분되어 있고, 이들이 모두 중괄호 {}로 둘러싸여 있는 것을 볼 수 있습니다.

 

예를 들어, 다음과 같은 딕셔너리가 있다고 한다면

{'name' : 'Lemon', 'age' : 7, 'food' : 'apple'}

이 딕셔너리의 정보는 다음과 같습니다.

key value
name Lemon
age 7
food apple

딕셔너리 만들기

1. 중괄호 {} 사용

딕셔너리를 만드는 가장 간단한 방법입니다.

딕셔너리명 = {Key1 : Value1, Key2 : Value2 ... }

 

2. dict() 함수 사용

파이썬에 있는 dict 함수를 이용해 제작 가능하기도 합니다.

딕셔너리명 = dict([(Key1, Value1), (Key2, Value2) ... ])

 

 

3. zip(), dict() 함수 사용

zip을 이용해 key만 있는 리스트와 value만 있는 리스트를 합쳐 딕셔너리를 만들 수도 있습니다.

key_리스트명 = [ ... ]
value_리스트명 = [ ... ]
딕셔너리명 = dict(zip(keys_리스트명, values_리스트명))

 

<예시 코드>

number1 = {1 : 'one', 2 : 'two', 3 : 'three'}
number2 = dict([(1, 'one'), (2, 'two'), (3, 'three')])
keys = [1, 2, 3]
values = ['one', 'two', 'three']
number3 = dict(zip(keys, values))

print(number1, number2, number3, sep = '\n')
{1: 'one', 2: 'two', 3: 'three'}
{1: 'one', 2: 'two', 3: 'three'}
{1: 'one', 2: 'two', 3: 'three'}

 

<주의사항>

  • key 값은 중복되면 안 됨
  • key에 리스트는 넣을 수 없음

딕셔너리 사용법

딕셔너리에서는 key를 이용해 value 값을 얻어올 수 있습니다.

grade = {'Andrew' : 80, 'Blake' : 75, 'Christopher' : 90, 'Dwain' :100}

print(grade['Andrew'])
print(grade['Christopher'])
80
90

 

이렇게 리스트에서는 인덱스를 활용해 요소를 뽑아왔다면 딕셔너리에서는 key를 이용해 요소를 뽑아올 수 있습니다.


딕셔너리에 요소 추가

딕셔너리 요소 추가는 매우 간단합니다.

딕셔너리명[key] = value

 

이렇게 하면 딕셔너리의 맨 마지막에 해당 key : value가 추가됩니다.

딕셔너리는 어차피 인덱스가 아닌 key로 접근하기 때문에 맨 마지막에 추가되게 하는 기능만 있으면 되는 것 같습니다.

diction = {'a' : 1, 'b' : 2}

diction['c'] = 3
diction[100] = False
diction[True] = [1, 2, 3]

print(diction)
{'a': 1, 'b': 2, 'c': 3, 100: False, True: [1, 2, 3]}

딕셔너리 관련 함수

  • 요소 접근, 제거

딕셔너리명[key] : 해당 key의 value 값 반환

딕셔너리명.get(key) : 해당 key의 value 값 반환

 

딕셔너리명.pop(key) : 해당 key의 value 값 제거

del 딕셔너리명[key] : 해당 key의 value 값 제거

딕셔너리명.clear() : 해당 딕셔너리의 모든 요소 제거

diction1 = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5}
diction2 = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5}

print(diction1['a'])
print(diction1.get('c'))

diction2.pop('d')
print(diction2)

del diction2['a']
print(diction2)

diction2.clear()
print(diction2)
1
3
{'a': 1, 'b': 2, 'c': 3, 'e': 5}
{'b': 2, 'c': 3, 'e': 5}
{}

 

  • key, value 얻기

딕셔너리명.keys() : 해당 딕셔너리의 key만 객체로 만들어 반환

딕셔너리명.values() : 해당 딕셔너리의 value만 객체로 만들어 반환

딕셔너리명.items() : 해당 딕셔너리의 key, value를 튜플로 묶어 객체로 만들어 반환

upper_char = {'a' : 'A', 'b' : 'B', 'c' : 'C', 'd' : 'D'}

print(upper_char.keys())
print(upper_char.values())
print(upper_char.items())
dict_keys(['a', 'b', 'c', 'd'])
dict_values(['A', 'B', 'C', 'D'])
dict_items([('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D')])

 

  • 요소 확인

key in 딕셔너리명 : 해당 딕셔너리에 key가 있으면 True, 없으면 False를 반환

fruit = {'apple' : 'a', 'banana' : 'b', 'grape' : 'g'}

print('apple' in fruit)
print('lemon' in fruit)
True
False

 

not in은 당연히 반대겠죠? (절대 귀찮은 거 아님)

 

  • 딕셔너리 복사

새 딕셔너리명 = 딕셔너리명.copy() : 딕셔너리를 복사함

fruit = {'apple' : 'a', 'banana' : 'b', 'grape' : 'g'}

new_fruit = fruit.copy()
print(fruit, new_fruit, sep = '\n')
{'apple': 'a', 'banana': 'b', 'grape': 'g'}
{'apple': 'a', 'banana': 'b', 'grape': 'g'}

튜플 (Tuple)

지금까지 딕셔너리에 관해 알아봤고, 이제 마지막으로 튜플에 관해 알아보겠습니다.

튜플은 리스트와 거의 흡사한 자료형입니다. 따라서 튜플에도 여러 값을 저장할 수 있지만, 리스트나 딕셔너리와 달리 값의 변경이 불가능합니다.

 

튜플의 기본 모습은 다음과 같습니다.

(요소1, 요소2, 요소3 ... )

튜플 만들기

1. 소괄호 () 사용

리스트는 대괄호 [], 딕셔너리는 중괄호 {}였다면, 튜플은 소괄호 ()를 이용해 생성할 수 있습니다.

튜플명 = (요소1, 요소2, 요소3 ... )

 

2. tuple() 함수 이용

tuple 함수를 이용해서도 생성할 수 있습니다.

튜플명 = tuple(이터러블)

 

<예시 코드>

tuple1 = (1, 2, 3, 4)

str = 'hello'
tuple2 = tuple(str)

lst = ['a', 'b', 'c']
tuple3 = tuple(lst)

print(tuple1, tuple2, tuple3, sep = '\n')
(1, 2, 3, 4)
('h', 'e', 'l', 'l', 'o')
('a', 'b', 'c')

튜플 사용하기

튜플은 리스트와 똑같이 인덱스를 이용해 사용하면 됩니다.

tupl = (1, 2, 3, 4)

print(tupl[0])
print(tupl[-1])
1
4

튜플의 인덱싱, 슬라이싱

튜플도 인덱스가 있기 때문에 리스트와 같이 인덱싱과 슬라이싱이 가능합니다. 리스트의 인덱싱, 슬라이싱은 이전에 자세히 다뤘으니 이전 글을 보는 것을 추천드립니다.

2024.01.26 - [프로그래밍/파이썬 공부하기] - Python 공부하기 - 4 (리스트)

 

Python 공부하기 - 4 (리스트)

2024.01.24 - [프로그래밍/파이썬 공부하기] - Python 공부 - 3 (클래스, 메서드, 인스턴스, 객체, 속성) Python 공부 - 3 (클래스, 메서드, 인스턴스, 객체, 속성) 2024.01.23 - [프로그래밍/파이썬 공부하기] - Py

olzl07.tistory.com

 

슬라이싱 : 튜플명[시작인덱스:종료인덱스:간격]

tupl = (1, 2, 3, 4, 5, 6)

print(tupl[1:3:1])
print(tupl[2:4])
print(tupl[:2:2])
print(tupl[1::2])
print(tupl[::2])
print(tupl[::-1])
print(tupl[4:1:-2])
(2, 3)
(3, 4)
(1,)
(2, 4, 6)
(1, 3, 5)
(6, 5, 4, 3, 2, 1)
(5, 3)

튜플의 연산

  • 더하기

튜플을 서로 더하면 일반적인 리스트 더해지듯이 더해집니다.

tupl1 = (1, 2, 3)
tupl2 = (4, 5, 6)
tupl = tupl1 + tupl2

print(tupl)
(1, 2, 3, 4, 5, 6)

 

  • 곱하기

튜플에 상수를 곱하면 해당 튜플이 그대로 반복됩니다.

tupl1 = (1, 2, 3)
tupl = tupl1 * 3

print(tupl)
(1, 2, 3, 1, 2, 3, 1, 2, 3)

튜플 관련 함수

튜플은 값의 변경이 불가능하기 때문에 리스트나 딕셔너리에 비해 함수의 수가 좀 적습니다.

 

len(튜플명) : 튜플의 길이 반환

튜플명.index(값) : 튜플 내 해당 값이 가장 먼저 나오는 인덱스 반환

sum(튜플명) : 튜플 내의 모든 요소의 합 반환

max(튜플명) : 튜플 내의 최댓값 반환

min(튜플명) : 튜플 내의 최솟값 반환

(sum, max, min은 당연히 튜플 내 요소가 모두 정수 / 실수일 때만 작동)

enumerate(튜플명) : 튜플의 인덱스와 요소를 쌍으로 추출

튜플명.count(값) : 튜플 내의 값의 개수 반환

tupl = (7, 2024, 26.0, 1117, 111.1, 7)

print(len(tupl))
print(tupl.index(7))
print(sum(tupl))
print(max(tupl))
print(min(tupl))
print(list(enumerate(tupl)))
print(tupl.count(7))
6
0
3292.1
2024
7
[(0, 7), (1, 2024), (2, 26.0), (3, 1117), (4, 111.1), (5, 7)]
2

 

아까 소개한 tuple() 함수를 이용하면 리스트를 튜플로 바꿀 수 있습니다. 또, list() 함수를 이용하면 튜플을 리스트로 바꿀 수 있습니다. 따라서 list() 함수와 tuple() 함수를 이용해 리스트와 튜플을 자유자재로 변환할 수 있습니다.

list(튜플명) : 튜플을 리스트로 변환

tuple(리스트명) : 리스트를 튜플로 변환

list1 = ['a', 'b', 'c', 'd']
tuple1 = (1, 2, 3, 4)

list2 = list(tuple1)
tuple2 = tuple(list1)

print(list2, tuple2, sep = '\n')
[1, 2, 3, 4]
('a', 'b', 'c', 'd')

오늘은 이렇게 딕셔너리와 튜플에 대해 알아봤습니다. 제 경험상 딕셔너리는 많이 써보지 않았는데 튜플은 알게 모르게 많이 써본 것 같네요.

 

이제 이로써 파이썬의 기본적인 것들에 대해서는 다 알아봤고 다음부터는 numpy, pandas, matplotlib 같은 파이썬 내의 라이브러리들에 대해 알아보겠습니다.