2024.01.26 - [프로그래밍/파이썬 공부하기] - Python 공부하기 - 4 (리스트)
이전에는 리스트와 관련 함수들에 대해 공부했습니다. 이번 시간에는 리스트 외의 이터러블인 딕셔너리, 튜플에 대해 공부해 보겠습니다.
딕셔너리 (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 (리스트)
슬라이싱 : 튜플명[시작인덱스:종료인덱스:간격]
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 같은 파이썬 내의 라이브러리들에 대해 알아보겠습니다.
'프로그래밍 > 파이썬 공부하기' 카테고리의 다른 글
Python 공부하기 - 7-1 (Numpy) (6) | 2024.06.30 |
---|---|
Python 공부하기 - 6 (세트) (0) | 2024.06.30 |
Python 공부하기 - 4 (리스트) (0) | 2024.01.26 |
Python 공부 - 3 (클래스, 메서드, 인스턴스, 객체, 속성) (0) | 2024.01.24 |
Python 공부 - 2 (if문, for문) (1) | 2024.01.23 |