
본 블로그 글은 박동민·강영민 저자님의 으뜸파이썬 교재를 참고하여 만들어진 글임을 밝힙니다.
딕셔너리 이름 = {[키 1] : [값 1], [키 2] : [값 2], ...}
딕셔너리 생성 및 조회
| Key | Value |
|---|---|
| 이름 | 홍길동 |
| 나이 | 26 |
| 몸무게 | 82 |
person = {'이름' : '홍길동', '나이' : 26, '몸무게' : 8}
print(person['이름']) # '홍길동'
print(person['나이']) # 26
print(person['몸무게']) # 82
딕셔너리 값 삽입 및 삭제
person['직업'] = '율도국의 합' # 새로운 키:값 항목 삽입
del person['나이'] # '나이' key로 하는 항목 삭제
, >=, <, <=와 같은 비교연산은 지원하지 않음
| 메소드 | 기능 |
|---|---|
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))
튜플 = (값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
튜플의 값 변경
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 이상: 집합이 삽입 순서를 유지한다. 즉, 집합에 요소를 추가한 순서대로 반환된다.
- 단, 집합은 중복 요소를 허용하지 않으므로 동일한 요소를 다시 추가해도 순서에 영향을 미치지 않는다.
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'}