- 개요
파이썬의 시퀀스 중에서 Key와 Value 구조로 값을 저장하는 시퀀스들이 존재한다
대표적으로 딕셔너리와 Set을 예시로 들 수 있는데, 해당 시퀀스들은 해시 테이블을 기반으로 설계되었다
해시 테이블은 Key에 Value를 저장하는 구조로 Key 값의 연산 결과에 따라 직접 접근이 가능하다
Key 값을 해싱 함수에 인자로 사용하여 해시 주소를 반환하고, 반환된 해시 주소를 통해 Value에 접근이 가능하다
따라서 해시 테이블과 관련하여 알아본다
1) hash 함수를 통한 해시값 확인
t1 = (10, 20, (30, 40, 50))
t2 = (10, 20, [30, 40, 50])
print(hash(t1))
print(hash(t2))
위와 같이 2개의 튜플을 생성한다
t1의 경우 중첩된 튜플 구조이고, t2의 경우 리스트가 포함된 튜플 구조이다
이때 hash 함수를 사용하면 해당 컨테이너의 해시값을 반환한다


실행한 결과 t2에서는 해시값을 가져올 수 없는 것을 확인할 수 있다
이러한 이유는 mutable 시퀀스는 해시 테이블로 구현되지 않기 때문이다
그러므로 해시는 immutable 시퀀스에서만 사용이 가능하다
2) 해시 테이블의 기능을 활용하는 함수 : setdefault
파이썬의 setdefault 함수는 딕셔너리와 연관지어 사용할 수 있는 함수이다
- 딕셔너리에서 특정 Key가 존재하지 않는 경우 : 해당 Key와 함께 기본값을 추가
- 키가 이미 존재하는 경우 : 해당 키의 값을 반환
setdefault 함수를 사용하여 컨테이너들을 손쉽게 딕셔너리로 변환하는 것이 가능하다
2 - 1) setdefault 함수를 사용하지 않는 경우
source = (('k1', 'val1'),
('k1', 'val2'),
('k1', 'val3'),
('k2', 'val4'),
('k2', 'val5'))
new_dict1 = {}
for k, v in source:
if k in new_dict1:
new_dict1[k].append(v)
else:
new_dict1[k] = [v]
print(new_dict1)
setdefault 함수를 사용하지 않는 경우 위와 같이 조건문을 추가하여 Key가 이미 존재하는지 판단해야 한다
실행 결과는 다음과 같다

의도한 대로 튜플이 딕셔너리로 문제없이 변환되었다
2 - 2) setdefault 함수를 사용하는 경우
source = (('k1', 'val1'),
('k1', 'val2'),
('k1', 'val3'),
('k2', 'val4'),
('k2', 'val5'))
new_dict2 = {}
for k, v in source:
new_dict2.setdefault(k, []).append(v)
print(new_dict2)
2 - 1)과 다르게 로직이 매우 간단해지는 것을 확인할 수 있다
setdefault 함수의 인자로 Key와 Value를 지정해야 하는데,
코드에서는 Value로 빈 배열을 주고 append를 통해 배열에 값을 추가한다
실행 결과는 다음과 같다

마찬가지로 튜플이 딕셔너리로 문제없이 변환된 것을 확인할 수 있다
'Python > 파이썬 심화' 카테고리의 다른 글
| 일급 함수의 특징 (1) (0) | 2025.08.12 |
|---|---|
| 파이썬 시퀀스 (7) (0) | 2025.08.12 |
| 파이썬 시퀀스 (5) (0) | 2025.08.07 |
| 파이썬 시퀀스 (4) (0) | 2025.08.07 |
| 파이썬 시퀀스 (3) (0) | 2025.08.05 |