이전에 List와 Tuple을 다뤄 봤습니다. 이 둘은 값의 나열
을 다루며, 순서가 보장되기 때문에 인덱싱과 슬라이싱이 가능했죠. 이번에 다뤄 볼 Dictionary와 Set도 Iterable 자료형이지만, List나 Tuple과는 조금 다릅니다.
Dictionary
Dictionary
는 Key-value 쌍으로 표현되는 자료형입니다. 사람
에 대한 정보는 이름=조민규, 닉네임=PlanB
처럼 표현할 수 있듯, Dictionary라는 단어의 뜻처럼 사전
처럼 데이터를 관리합니다.
d = {} | |
# 빈 딕셔너리 | |
d = {'name': '조민규', 'nickname': 'PlanB'} | |
# 중괄호로 감싸고, 각 쌍은 key: value 형태로 정의하며, 쉼표로 구분 | |
d = {1: 10, 2: 20} | |
# key는 불변 자료형, value는 어떤 자료형이든 사용할 수 있음 | |
d = {'info': {'name': '조민규', 'nickname': 'PlanB'}} | |
# 다중 딕셔너리 | |
print(d) | |
# {'info': {'name': '조민규', 'nickname': 'PlanB'}} |
값 조회하기
List와 Tuple은 인덱스로 값을 조회했던 것에 비해, 딕셔너리는 key
를 통해 값을 조회합니다.
d = {'name': '조민규', 'nickname': 'PlanB'} | |
print(d['name']) | |
# '조민규' | |
d = {1: 10, 2: 20} | |
# key가 int형인 경우 | |
print(d[1]) | |
# 10 | |
d = {'info': {'name': '조민규', 'nickname': 'PlanB'}} | |
# 다중 딕셔너리 | |
print(d['info']['name']) | |
# '조민규' |
값 추가, 수정, 제거하기
Dictionary는 값 추가, 수정, 제거가 자유롭습니다.
d = {} | |
d['name'] = '조민규' | |
d['nickname'] = 'PlanB' | |
# 요소 추가 | |
d['nickname'] = 'PlanC' | |
# 요소 수정 | |
del d['nickname'] | |
# 요소 제거 |
Set
Set
은 수학의 집합과 비슷한 자료형입니다. 중복을 허용하지 않고, 순서가 없습니다. 사실 수학의 집합 개념을 사용하거나, 중복을 제거하는 용도가 아니면 자주 사용하지는 않습니다.
s = set() | |
# 빈 집합 | |
# Set도 딕셔너리처럼 중괄호를 사용하는데, {}의 경우 딕셔너리로 추론되기 때문에 set() 사용 | |
s = {1, 2, 3, 3} | |
print(s) | |
# {1, 2, 3} | |
# 중복이 제거됨 | |
s2 = {1, 2, 5} | |
print(s & s2) | |
# {1, 2} | |
# 교집합 | |
print(s | s2) | |
# {1, 2, 3, 5} | |
# 합집합 | |
print(s - s2) | |
# {3} | |
# 차집합 |
값 추가, 수정, 제거하기
Set은 Tuple과 다르게 mutable(가변) 자료형
이기 때문에 값을 자유롭게 추가, 수정, 제거할 수 있습니다. 그러나 다른 iterable 자료형에 비해 문법적으로 조금 다릅니다.
s = {1, 2, 3} | |
s.add(4) | |
print(s) | |
# {1, 2, 3, 4} | |
s.update([4, 5]) | |
print(s) | |
# {1, 2, 3, 4, 5} | |
s.remove(4) | |
print(s) | |
# {1, 2, 3, 5} |
List에서 중복된 값 없애기
Set은 중복을 허용하지 않기 때문에, List와 같은 자료형에서 중복된 값을 없애기 위해서 자주 사용됩니다.
l = [1, 2, 3, 3, 4, 5, 5] | |
l = list(set(l)) | |
# set으로 캐스팅하여 중복을 제거하고, list로 다시 캐스팅 | |
print(l) | |
# [1, 2, 3, 4, 5] |
문자열 이야기
문자열도 Iterable이며 순서가 보장되는 자료형입니다. 따라서 인덱싱과 슬라이싱, 합과 곱 연산이 가능합니다.
s = 'PlanB' | |
# Indexing | |
print(s[2]) | |
# 'a' | |
# Slicing | |
print(s[3:]) | |
# 'nB' | |
# + | |
print(s + '!!') | |
# 'PlanB!!' | |
# * | |
print(s * 2) | |
# 'PlanBPlanB' |
Unpacking
Iterable에는 unpacking
이라는 개념이 있습니다. 객체의 각 요소들을 풀어 변수에 대입하는 것입니다. Python 3에는 확장 언패킹(extended unpacking)이라는 개념도 존재합니다.
a, b, c, d = [1, 2, 3, 4] | |
print(a) | |
# 1 | |
print(b) | |
# 2 | |
print(c) | |
# 3 | |
print(d) | |
# 4 | |
a, *b, c = [1, 2, 3, 4, 5] | |
# Python 3의 확장 언패킹(extended unpacking) | |
print(a) | |
# 1 | |
print(b) | |
# [2, 3, 4] | |
print(c) | |
# 5 |
Unpacking의 반대 개념으로 packing
이 있는데, 사실 우리가 위에서 Iterable 객체에 리터럴로 값을 대입했던 것들이 모두 packing에 속합니다.
l = [1, 2, 3, 4] | |
t = 1, 2, 3, 4 | |
d = {1: 10, 2: 20} | |
s = {1, 2, 3, 4} |
타입 캐스팅
Iterable 타입 간 타입 캐스팅도 자유롭습니다. 단, list/tuple/set을 dictionary로 캐스팅할 수는 없습니다.
# - list를 캐스팅 | |
l = [1, 2, 3, 4] | |
print(tuple(l), set(l)) | |
# (1, 2, 3, 4) {1, 2, 3, 4} | |
# - tuple을 캐스팅 | |
t = 1, 2, 3, 4 | |
print(list(t), set(t)) | |
# [1, 2, 3, 4] {1, 2, 3, 4} | |
# - set을 캐스팅 | |
s = {1, 2, 3, 4} | |
print(list(s), tuple(s)) | |
# [1, 2, 3, 4] (1, 2, 3, 4) | |
# - dictionary를 캐스팅 | |
d = {1: 10, 2: 20} | |
print(list(d), tuple(d), set(d)) | |
# [1, 2] (1, 2) {1, 2} | |
# key들만 추출 |
Iterable 타입의 참과 거짓
Iterable 타입의 참과 거짓을 판단하는 기준은 정말 간단합니다. 비어 있으면 False, 비어 있지 않으면 True입니다.
'Python 계열 > Python 레거시 글' 카테고리의 다른 글
[Python] 반복문 - for (0) | 2018.06.22 |
---|---|
[Python] 조건문 - if (0) | 2018.06.21 |
[Python] Iterable 자료형 - List, Tuple (1) | 2018.06.19 |
[Python] 변수와 기본 자료형 (0) | 2018.06.18 |
[Python] 주석 (0) | 2018.06.17 |