Python
[Python] Set, Dictionary
daze1002
2025. 2. 17. 01:56
반응형
06. 셋 (Set)
06-01. 셋 개요
Set이란
Set 표현식
중괄호{}를 사용해서 집합을 생성한다.
# 문자열로 집합 생성 safari_set = {"Bear", "Koala", "Gorilla", "Squirrel"} # 숫자 집합 numbers = {1, 2, 3, 4, 5} # 혼합된 타입 집합 mixed_set = {1, "Bear", (1, 2, 3)}
set() 을 사용해 형 변환도 가능하다.
# 리스트로 집합 생성 another_safari_set = set(["Monkey", "Tiger", "Wolf"])
set() 함수를 활용해 중복 제거
# set함수 # 1. list 중복 제거 l = [1,2,3,3,3,4,5] a = set(l) print(a) #{1, 2, 3, 4, 5} print(type(a)) #<class 'set'> # 2. 튜플 중복 제거 t = (1,2,2,3,4) b = set(t) print(b) #{1, 2, 3, 4} # 3. dict # 키 set구성 | value 중복 제거 dict = {'a':123, 'b':456, 'c':123} c = set(dict) print(c) # {'c', 'a', 'b'} 키값만 가지고 set 생성 d = set(dict.values()) print(d) # {456, 123} 중복 제거
셋의 특징
순서가 없는 자료형이며, 순서가 없으므로 인덱스를 사용한 접근이 불가능하다.
중복을 허용하지 않으므로 동일한 값은 하나만 저장된다.
가변성을 가진 자료형으로 데이터, 즉 요소를 추가하거나 제거할 수 있다.
순서가 없는 자료형으로 특정 요소에 접근할 수 없으므로 직접 변경은 할 수 없다.
safari = {'Pig', 'Squirrel', 'Bear', 'gorilla'} safari .remove('korilla') # set의 데이터 중 remove의 값 제거 safari .add("Gorilla") # set에 add('값')으로 값을 추가 print(safari ) # {'Bear', 'Squirrel', 'Gorilla', 'Pig'}
다양한 데이터 타입을 지원한다. (여러 데이터 타입 같이 저장 가능)
수학적 집합 연산(합집합, 교집합, 차집합 등)을 지원한다.
in 키워드를 통해 포함 여부를 반환받을 수 있다.
safari = {'Squirrel','Gorilla', 'Tiger', 'Sheep', 'monkey', 'wolf'}
print('Gorilla' in safari ) # True
06-02. 셋의 메서드
요소를 추가하는 메서드
- add(값) : set의 list에 인자로 전달받은 값을 추가한다.
- update(값) : 요소 값을 추가한다.
- 배열을 이용해 한번에 여러 개의 값을 추가하는 것도 가능하나, 이때도 중복된 값은 추가되지 않는다.
요소를 제거하는 메서드
- remove(값) : 특정 요소를 제거하며, 값이 존재하지 않으면 Error를 발생시킨다.
- discard(값) : 특정 요소를 제거하며, 값이 존재하지 않아도 Error가 발생하지 않는다.
- pop() : 임의의 값을 제거한다.
- 집합은 순서를 보장하지 않으므로, 어떤 값이 제거될지 예측할 수 없다.
- clear()는 모든 값을 제거한다.
집합 연산 메서드
- union() : 두 set 자료형을 합친다. (= 합집합) = “|”
- intersection() : 두 set 자료형의 교집합을 반환한다. = “&”
- difference() : 두 set 자료형의 차집합을 반환한다. (좌항을 기준으로 우항의 차집합을 반환한다.)
- symmetric_difference() : 대칭 차집합을 반환한다. (양쪽 모두의 차집합을 반환한다.) = “^”
복사 메서드
- copy() : 대상 set을 복사하여 반환한다.
07. 딕셔너리 (Dictionaries)
07-01. 딕셔너리 개요
딕셔너리란
딕셔너리 표현식
딕셔너리명 = { 키1: 값1, 키2: 값2, ... }
딕셔너리의 특징
- 키(key)와 값(value)의 쌍으로 구성된다.
- 사전에서 단어를 찾아 뜻을 확인하는 것처럼, Dictionaries에서 키를 사용하여 해당 값을 손쉽게 찾고 활용할 수 있다.
- 키는 고유해야 하며 불변(immutable)한 데이터 타입이어야 한다.
- 각 키는 유일하게 존재해야 하므로, 동일한 키로 여러 값을 저장할 수 없다.
- 만약 중복 키로 값을 입력하면, 기존 값을 덮어쓴다.
- 이러한 특징은 데이터 검색 및 관리의 효율성을 높여준다.
- key로 가변 자료형(리스트, 딕셔너리)는 사용할 수 없고, 기본 자료형이나 불변 자료형(튜플)은 사용할 수 있다.
- 각 키는 유일하게 존재해야 하므로, 동일한 키로 여러 값을 저장할 수 없다.
- Dictionaries는 가변적인 자료구조이다.
- 딕셔너리는 가변적인 자료구조로, Dictionaries 생성 후에도 키-값 쌍을 추가/삭제/수정할 수 있다.
- 이는 상황에 따라 데이터를 동적으로 변경해야 하는 경우 유용하게 활용될 수 있다.
- 빠른 조회와 수정이 가능하다.
- 딕셔너리는 해시 테이블을 사용하여 구현되므로, 평균적으로 O(1)의 시간 복잡도로 항목을 조회하고 수정할 수 있다.
- del 키워드를 이용해 딕셔너리를 삭제할 수 있다.
del safari
# print(safari) # Error 발생
- in 키워드를 사용하여 key 값의 존재 여부를 확인할 수 있다.
safari = {
'tiger' : 'langChain',
'Squirrel' :'JPA',
'Bear':'Python',
'Gorilla':'Spring'
}
print('tiger' in safari) # True
딕셔너리의 함수 저장
def add(a,b):
return a+b
def sub(a,b):
return a-b
f = {0: add, 1: sub}
print(f[0](4,5)) #9
print(f[1](4,5)) #-1
07-02. 딕셔너리의 메서드
get()
- get(키)는 매개변수로 전달받은 키에 해당하는 값을 반환한다.
- 만약 해당 키가 존재하지 않으면 기본값(None)을 반환한다.
keys()
- 딕셔너리의 모든 키를 반환한다.
values()
- 딕셔너리의 모든 값을 반환한다.
items()
- 딕셔너리의 모든 항목(키-값 쌍)을 반환한다.
pop()
pop(키)는 매개변수의 값을 제거하고 반환한다.
키가 존재하지 않으면 기본값을 반환하고, 만약 기본값이 지정되지 않으면 'KeyError'가 발생한다.
del 키워드를 이용해 특정 키의 키-값 아이템만 제거할 수도 있다.
del safari['Squirrel'] print(safari) # {'Bear': 'Python', 'Gorilla': 'Spring'}
popitem()
- 마지막 요소의 key-value 값을 제거하고 튜플 형태로 반환한다.
update()
- 다른 딕셔너리나 키-값 쌍의 iterable을 사용하여 딕셔너리 요소를 추가한다.
clear()
- 모든 항목을 제거한다.
07-03. 딕셔너리의 복사
얕은 복사
# 1.shallow copy a = {'a': 1, 'b': 2, 'c': 3} b = a # 사전 레퍼런스의 복사 (공유됨) print(a) print(b) a['a'] = 100 print(a) print(b)
깊은 복사
# 2.deep copy c = {'a': 1, 'b': 2, 'c': 3} d = c.copy() print(c) print(d) c['a'] = 300 print(c) print(d) # 변경되지 않음.
복사 시 알아둘 것
# value에 list가 있다면 copy메소드를 사용해도 list는 얕은 복사되어 변수 간 공유된다. a = {'a': [1,2,3], 'b':100} b = a.copy() print(a) #{'a': [1, 2, 3], 'b': 100} print(b) #{'a': [1, 2, 3], 'b': 100} a['b'] = 200 a['a'][0] = 999 print(a) #{'a': [999, 2, 3], 'b': 200} print(b) #{'a': [999, 2, 3], 'b': 100} # value에 dict가 있다면 a = {'user':{'name':'김동현','age':20},'amount':123} b = a.copy(); print(a) print(b) a['user']['name'] = '김동팔' print(a) print(b)
딕셔너리의 병합
# update 메소드를 통한 두 dict의 병합
# 동일한 키값이 있다면, 인수로 주어진 dict의 아이템으로 덮어쓰기 된다.
dic1 = {'a':10, 'b':20}
dic2 = {'c':100, 'd':300}
dic1.update(dic2)
print(dic1) #{'a': 10, 'b': 20, 'c': 100, 'd': 300}
print(dic2) #{'c': 100, 'd': 300}
딕셔너리의 정렬
# dict의 정렬 : sorted
numbers = {'first': 1, 'second': 2, 'third': 3, 'Fourth': 4}
numbers['hundred'] = 100
numbers['fifth'] = 5
print(list(numbers)) #['first', 'second', 'third', 'Fourth', 'hundred', 'fifth']
# key값 정렬
print(sorted(numbers)) #['Fourth', 'fifth', 'first', 'hundred', 'second', 'third']
# value값 정렬
print(sorted(numbers.values())) #[1, 2, 3, 4, 5, 100]
# key정렬 (value값 정렬에 따라)
print(sorted(numbers, key=numbers.__getitem__))