사전 자료형
- 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형
- 변경 불가능한(Immutble) 자료형을 키로 사용할 수 있음
- 해시 테이블(Hash Table)을 이용하므로 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있는 장점이 있음
초기화 : dict()이나 {}으로 초기화
data = dict()
data['사과'] = 'apple'
data['바나나'] = 'banana'
data['코코넛'] = 'coconut'
# 또는 아래 방법으로도 초기화 가능
data = {
'사과': 'apple',
'바나나': 'banana',
'코코넛': 'coconut'
}
print(data) # {'사과': 'apple', '바나나': 'banana', '코코넛': 'coconut'} 출력
키 존재 여부 검사
- 특정 키가 존재하는 지 검사하기위해 'O(1)'(상수시간)이 소요. 때문에 문자열과 같은 키를 이용해서 데이터를 저장하고 관리하고자 하는 상황에서는 리스트보다 효율적이며 데이터 조회를 빠르게 수행할 수 있음.
# 사과라는 키가 data라는 사전에 포함되어 있는지 여부(키 존재 여부 검사)
if '사과' in data:
print("사과를 키로 가지는 데이터가 존재합니다") # 정상 출력
키, 값 추출
- keys(), values() 메서드를 이용하여 키와 값 데이터만 뽑아서 리스트로 이용할 수 있음.
- 파이썬 3 이후에는 메모리 낭비를 줄이기 위해 keys() 메서드가리스트가 아닌 객체를 반환한다. list(data.keys())를 이용하면 리스트로 반환받을 수 있다. 참고 : https://wikidocs.net/16
# 키 데이터만 담은 리스트
key_list = data.keys()
# 값 데이터만 담은 리스트
value_list = data.values()
# 각 키에 따른 값을 하나씩 출력
for key in key_list:
print(data[key])
- key, Value 쌍 추출 : items() 메서드를 이용하면 key와 Value의 쌍을 튜플로 묶은 값을 돌려준다
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])
- Key로 value 얻기
# 방법 1
data['파인애플'] # 찾는 key값이 없어 KeyError 발생
# 방법 2
print(data.get('파인애플')) # 찾는 key 값이 없어도 KeyError 발생하지 않고 None 반환
# 기본값을 부여해서 None 대신 기본값을 반환하도록 할 수 있다.
print(data.get('파인애플', 'pineapple')) # 찾는 파인애플 key가 없지만 디폴트값 pineapple이 출력됨
- clear()로 key : value 쌍 모두를 지울 수 있다
- 특정 Key 삭제 : del 사전명[key이름] 또는 사전명.pop(key명, None)
집합자료형
집합자료형의 특징
- 수학적 집합의 특징과 같음
1. 중복을 허용하지 않는다.
2. 순서가 없다. (리스트나 튜플은 순서가 있음)
이러한 특징으로 인하여 데이터가 존재하는지, 존재하지 않는지 여부를 체크할 때 사용하면 좋음
- 데이터의 조회 및 수정에 있어 O(1)(상수시간)의 시간에 처리할 수 있음
집합의 초기화
- 리스트 혹은 문자열을 이용해 초기화 : set() 함수 이용
- 중괄호({}) 안에 각 원소를 콤마(,)를 기준으로 구분하여 삽입하여 초기화
# 초기화 방법 1
data = set([1, 1, 2, 3, 4, 4, 5]) # set 안에 리스트([])로 초기화
# 초기화 방법 2
data = {1, 1, 2, 3, 4, 4, 5}
print(data) # {1, 2, 3, 4, 5} 중복된 원소는 제거된 값만 포함 된다.
# 문자열 초기화
data = set("hello")
print(data) # {'e', 'h', 'l', 'o', 'l'}
# 비어있는 집합 자료형은 set()으로 초기화가능
집합 자료형의 연산
- 합집합 : A에 속하거나 B에 속하는 원소(A U B) A or B
- 교집합 : A에도 속하고 B에도 속하는 원소(A n B) A and B
- 차집합 : 집합 A의 원소 중에서 B에 속하지 않는 원소들로 이루어진 집합(A - B)
a = set([1,2,3,4,5])
b = set([3,4,5,6,7])
# 합집합
print(a | b)
print(a.union(b))
# 교집합
print(a & b)
print(a.intersection(b))
# 차집합
print(a - b)
print(a.difference(b))
집합 자료형 관련 메서드
- add() : 값 1개 추가
- update() : 값 여러개 추가
- remove() : 특정 값 제거
data = set([1,2,3])
data.add(4)
print(data) # 출력 {1, 2, 3, 4}
data = set([1,2,3])
data.update([4,5,6])
print(data) # 출력 {1,2,3,4,5,6}
data = set([1,2,3])
data.remove(2)
print(data) # 출력 {1,3}
사전 자료형과 집합 자료형의 특징
- 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
- key 혹은 집합의 원소(Element)를 이용해 O(1)(상수시간)의 시간 복잡도로 조회한다.
본 글은 나동빈 - 이코테 2021 강의 몰아보기를 토대로 작성한 정리입니다.
좋은 강의를 올려주신 나동빈님께 감사드립니다.
'코딩테스트' 카테고리의 다른 글
[파이썬] 문자열 포맷팅 Formatting (0) | 2022.07.12 |
---|---|
이코테 6강 리뷰 (기본 입출력) (0) | 2022.05.17 |
이코테 4강 리뷰 (문자열, 튜플 자료형) (0) | 2022.05.13 |
이코테 3강 리뷰 (리스트 자료형) (0) | 2022.05.12 |