[Python] 7. 딕셔너리, 튜플, 집합

YJ·2024년 12월 5일

Python 공부하기

목록 보기
8/13
post-thumbnail

본 블로그 글은 박동민·강영민 저자님의 으뜸파이썬 교재를 참고하여 만들어진 글임을 밝힙니다.

딕셔너리, 튜플, 집합

딕셔너리

  • 키(Key)와 값(Value)을 쌍으로 갖는 자료형
    • [키] : [깂] 형식
  • 키를 이용하여 값을 참조할 수 있다.
  • 이때 키는 중복이 되면 안된다.

형식

딕셔너리 이름 = {[1] : [1], [2] : [2], ...}

실습

딕셔너리 생성 및 조회

KeyValue
이름홍길동
나이26
몸무게82
person = {'이름' : '홍길동', '나이' : 26, '몸무게' : 8}
print(person['이름']) # '홍길동'
print(person['나이']) # 26
print(person['몸무게']) # 82

딕셔너리 값 삽입 및 삭제

person['직업'] = '율도국의 합' # 새로운 키:값 항목 삽입
del person['나이'] # '나이' key로 하는 항목 삭제
  • 존재하지 않는 키를 이용하여 항목 삭제시 KeyError 오류 발생

연산자

  • len() : 딕셔너리 항목의 수
  • in, not in : 키와 값이 딕셔너리에 있는지 확인
  • ==, != : 두 개의 딕셔너리가 동일한 항목을 가지고 있는지 확인
    • , >=, <, <=와 같은 비교연산은 지원하지 않음

메소드 정리

메소드기능
dict.keys()딕셔너리의 모든 키를 반환함
dict.values()딕셔너리의 모든 값을 반환함
dict.items()딕셔너리의 키와 값 쌍을 튜플 형태로 반환함
dict.get(key)지정한 키에 대한 값을 반환하며, 키가 없으면 None 또는 기본값을 반환함
dict.update()다른 딕셔너리 또는 키-값 쌍으로 딕셔너리를 갱신함
dict.pop(key)지정한 키에 대한 값을 반환하고, 해당 키-값 쌍을 딕셔너리에서 삭제함
dict.popitem()마지막 키-값 쌍을 제거하고 반환함 (Python 3.7 이상에서는 순서 유지)
dict.clear()딕셔너리의 모든 항목을 삭제함

💡딕셔너리의 순서

  • Python 3.6 이하: 딕셔너리의 순서는 정의되지 않았으며, 키-값 쌍의 순서를 예측할 수 없었다.
  • Python 3.7 이상: 딕셔너리가 삽입 순서를 유지한다. 즉, 딕셔너리에 키-값 쌍을 추가한 순서대로 반환한다.

실습

for문을 통한 순회

key를 순회하는 방법

person = {'이름' : '홍길동', '나이' : 26, '몸무게' : 82}
for key in person:
	print('key : value = {} : {}'.format(key, person[key]))
person = {'이름' : '홍길동', '나이' : 26, '몸무게' : 82}
for key in person.keys():
	print('key : value = {} : {}'.format(key, person[key]))

value를 순회하는 방법

person = {'이름' : '홍길동', '나이' : 26, '몸무게' : 82}
for value in person.values():
	print('value : {}'.format(value))

튜플

  • 여러개의 요소를 가지는 컬렉션 자료형
  • 한번 정해진 요소의 순서를 변경할 수 없다.
  • 불변(immutable) 객체이다.
    • 튜플 내부의 객체를 변경하거나 삭제하는 것도 불가능하다.

형식

튜플 = (1,2,3, ...)

실습

튜플의 생성과 조회

t = (1, 2, 3, 4)

print(t[0]) # 1
print(t[1]) # 2

패킹과 언패킹

  • 패킹 : 하나의 튜플 변수에 여러 개의 값을 넣는 것을 의미
  • 언패킹 : 패킹된 튜플 변수가 있으면, 여러 개의 값을 개별 변수에 담아 꺼내는 것
# 패킹
a = (1, 2)
print(a[0]) # 1
print(a[1]) # 2

# 언패킹
c = (3, 4)
d, e = c
print(d) # 3
print(e) # 4

스왑

  • 다른 언어들과 달리 변수의 값을 서로 스왑할때, a, b = b, a와 같이 한줄로 값을 교환하는 것이 가능하다.
a = 10
b = 20
print(a, b) # 10 20

a, b = b, a
print(a, b) # 20 10

튜플 연산

  • + 연산 : 피연산 튜플의 원소들을 서로 연결하는 기능
  • * 연산 : 피연산 튜플의 원소를 n번만 큼 반복하여 연결하는 기능
t = (10, 20, 30)
print(t + t) # (10, 20, 30, 10, 20, 30)
print(3 * t) # (10, 20, 30, 10, 20, 30, 10, 20, 30)

튜플의 메소드

  • count(x) : 튜플 내의 값에서 x가 몇 개 있는지 반환
  • index(x) : 튜플 내의 값에서 x가 위치한 인덱스 반환
t = (10, 20, 30, 20, 20, 10)
print(t.count(20)) # 2
print(t.index(30)) # 2

튜플의 값 변경

  • 튜플 값을 변경하고 싶다면, list 형식으로 바꾼 후 다시 튜플로 바꾸는 과정이 필요하다.

집합

  • 순서가 없는 자료형
    • 인덱스를 사용할 수 없다.
  • 동일한 값을 가지는 항목의 중복을 허용하지 않는다.
  • 교집합, 합집합, 차집합 등의 집합 연산이 가능하다.
  • 빈 집합 생성 시 다음과 같이 선언한다.
    • x = set()

형식

집합 = {1,2,3, ... }

실습

메소드설명
add(element)집합에 요소를 추가. 이미 존재하면 무시
discard(element)집합에서 특정 요소를 제거. 요소가 없으면 에러 없이 넘어감
clear()집합의 모든 요소를 제거하여 빈 집합으로 만듦
union(other_set)두 집합의 합집합 반환
difference(other_set)두 집합의 차집합 반환 (- 연산자와 동일)
intersection(other_set)두 집합의 교집합 반환 (& 연산자와 동일)
symmetric_difference(other_set)두 집합의 대칭 차집합 반환 (^ 연산자와 동일)
issubset(other_set)현재 집합이 다른 집합의 부분 집합인지 여부를 반환
issuperset(other_set)현재 집합이 다른 집합의 상위 집합인지 여부를 반환
isdisjoint(other_set)두 집합이 서로소(겹치는 요소가 없음)인지 여부를 반환
# 집합의 메소드
s = {1, 2, 3, 4, 5}
print(s) {1, 2, 3, 4, 5}

s.add(6)
print(s) # {1, 2, 3, 4, 5, 6} 

s.discard(3)
print(s) # {1, 2, 4, 5, 6}

# 집합 연산
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}

print(s1 | s2) # {1, 2, 3, 4, 5, 6}, s1.union(s2)
print(s1 & s2)  # {3, 4}, s1.intersection(s2)
print(s1 - s2)  # {1, 2}, s1.difference(s2)
print(s1 ^ s2)  # {1, 2, 5, 6}, s1.symmetric_difference(s2)

# 부분집합, 상위집합, 서로소 집합 연산
s1 = {1, 2, 3}
s2 = {1, 2}
s3 = {1, 2, 6}
s4 = {7, 8, 9}

print(s2.issubset(s1)) # True
print(s3.issubset(s1)) # False
print(s1.issuperset(s2)) # True
print(s1.issuperset(s3)) # False
print(s1.isdisjoint(s4)) # True

💡집합의 순서

  • Python 3.6 이하: 집합의 순서는 정의되지 않았으며, 요소의 순서를 예측할 수 없었다.
  • Python 3.7 이상: 집합이 삽입 순서를 유지한다. 즉, 집합에 요소를 추가한 순서대로 반환된다.
    • 단, 집합은 중복 요소를 허용하지 않으므로 동일한 요소를 다시 추가해도 순서에 영향을 미치지 않는다.

zip() - iterable 자료형 묶기

  • 리스트, 딕셔너리, 집합, 튜플과 같은 자료형을 iterable 자료형이라고 한다.
  • iterable 자료형들을 여러개 념겨주면 이를 합쳐 튜플 iterator를 반환하는 함수가 zip()이다.

실습

a = [10, 20, 30]
b = {'ten', 'twenty', 'thirty'}
print(list(zip(a,b)) # [(10, 'ten'), (20, 'twenty'), (30, 'thirty')}

zip()함수를 통해 묶은 자료형을 언패킹할 수 있음

a = [10, 20, 30]
b = {'ten', 'twenty', 'thirty'}
pack = zip(a, b)

c, d = zip(*pack)
print(c) # [10, 20, 30]
print(d) #{ 'ten', 'twenty', 'thirty'}
profile
제 글이 유익하셨다면 ♡와 팔로우로 응원 부탁드립니다.

0개의 댓글