728x90
반응형
딕셔너리
- 파이썬의 핵심 컬렉션 데이터 타입 중 하나인 **딕셔너리(Dictionary)**
- 딕셔너리는 키-값 쌍(key-value pairs)의 컬렉션으로 구성되어 있으며, 파이썬에서 데이터를 효율적으로 관리하는 데 필수적
1. 딕셔너리란 무엇인가?
- 딕셔너리는 정렬되지 않고(unordered) 수정 가능한(mutable) 컬렉션 데이터 타입
- 각 키-값 쌍은 키를 연관된 값에 매핑
# 딕셔너리는 키-값 쌍으로 구성된 컬렉션
person = {'name': 'Max', 'age': 28, 'city': 'New York'}
print(person)
## 출력: {'name': 'Max', 'age': 28, 'city': 'New York'}
2. 딕셔너리 생성 방법
- 딕셔너리를 생성하는 방법
- 1) 중괄호 사용
- 딕셔너리는 중괄호를 사용하여 생성하며, 각 키-값 쌍은 콜론(:)으로 구분하고, 항목(아이템)들은 쉼표(,)로 구분
- 2) 함수 사용
- dict() 내장 함수를 사용하여 딕셔너리를 생성 가능
- 함수를 사용할 때는 키를 인수로 전달하며, 키에 대해 따옴표를 사용할 필요 X
- 1) 중괄호 사용
# {} 사용
my_dict = {'name': 'Max', 'age': 28, 'city': 'New York'}
print(my_dict)
## 출력: {'name': 'Max', 'age': 28, 'city': 'New York'}
# 함수 사용
my_dict = dict(name='Mary', age=27, city='Boston')
print(my_dict)
## 출력: {'name': 'Mary', 'age': 27, 'city': 'Boston'}
3. 딕셔너리 값 접근 및 오류 처리
- 값을 접근할 때는 대괄호 안에 해당 키를 지정
my_dict = {'name': 'Max', 'age': 28}
print(my_dict['name']) # 결과: Max
print(my_dict['age']) # 결과: 28 [5]
- 주의: 딕셔너리에 존재하지 않는 키를 사용하여 접근하려고 하면 KeyError 예외가 발생합니다.
- 키 존재 여부 확인 및 예외 처리
- KeyError를 방지하기 위해 키가 딕셔너리 안에 있는지 확인하는 두 가지 일반적인 방법
- 1. if in 문 사용: 키가 딕셔너리 안에 있는지 확인
- 2. try-except 블록 사용: 키 접근을 시도하고, 예외가 발생하면 이를 포착하여 처리
- KeyError를 방지하기 위해 키가 딕셔너리 안에 있는지 확인하는 두 가지 일반적인 방법
my_dict = {'name': 'Max', 'age': 28}
# 키로 값 접근
print(my_dict['name'])
## 출력: Max
# 존재하지 않는 키 접근 시 예외 발생
try:
print(my_dict['email'])
except KeyError:
print("KeyError 발생: 'email' 키 없음")
## 출력: KeyError 발생: 'email' 키 없음
# if in 문으로 확인
if 'age' in my_dict:
print("'age' 키 존재")
## 출력: 'age' 키 존재
4. 딕셔너리 항목 수정 및 삭제
- 딕셔너리는 **수정 가능(mutable)**하므로 생성 후 항목을 추가하거나 변경 가능
- 1) 항목 추가/변경 (Overwrite)
- 새로운 키를 대괄호 안에 지정하고 값을 할당하면 항목이 추가
- 만약 키가 이미 존재한다면, 기존 값이 새로운 값으로 덮어쓰여짐
my_dict = {'name': 'Max', 'age': 28}
my_dict['email'] = 'max@xyz.com' # 추가
print(my_dict)
## 출력: {'name': 'Max', 'age': 28, 'email': 'max@xyz.com'}
my_dict['email'] = 'coolmax@xyz.com' # 덮어쓰기
print(my_dict)
## 출력: {'name': 'Max', 'age': 28, 'email': 'coolmax@xyz.com'}
- 2) 항목 삭제
- del 문: 특정 키에 해당하는 키-값 쌍을 삭제합니다.
- .pop(key) 메서드: 지정된 키에 해당하는 항목을 제거하고 해당 값을 반환합니다.
- .popitem() 메서드:
- Python 3.7 이전: 임의의 쌍을 제거합니다.
- Python 3.7 이후: 가장 마지막에 삽입된 항목을 제거합니다.
del my_dict['age']
print("del 이후:", my_dict)
## 출력: del 이후: {'name': 'Max', 'email': 'coolmax@xyz.com'}
value = my_dict.pop('email')
print("pop 반환값:", value)
## 출력: pop 반환값: coolmax@xyz.com
print("pop 이후:", my_dict)
## 출력: pop 이후: {'name': 'Max'}
5. 딕셔너리 복사 (Copying)
- 단순 할당(=)을 사용하면 두 딕셔너리 모두 메모리 내부의 동일한 딕셔너리를 참조
- 이 경우, 사본을 수정하면 원본 딕셔너리도 함께 수정됩니다.
original = {'a': 1, 'b': 2}
copy = original
copy['a'] = 99
print("original:", original)
## 출력: original: {'a': 99, 'b': 2}
- 실제 복사(Actual Copy)
- 1. .copy() 메서드 사용: 내장된 copy() 함수를 사용
- 2. dict() 함수 사용: 복사할 딕셔너리를 인수로 전달
original = {'a': 1, 'b': 2}
copy1 = original.copy()
copy1['a'] = 99
print(".copy() 사용:", original, copy1)
## 출력: .copy() 사용: {'a': 1, 'b': 2} {'a': 99, 'b': 2}
copy2 = dict(original)
copy2['b'] = 88
print("dict() 사용:", original, copy2)
## 출력: dict() 사용: {'a': 1, 'b': 2} {'a': 1, 'b': 88}
6. 딕셔너리 병합 및 업데이트
- 두 딕셔너리를 병합하거나 업데이트할 때는 .update() 메서드를 사용할 수 있습니다.
- .update() 메서드는 다음 규칙에 따라 딕셔너리를 업데이트
- 기존 키: 업데이트하려는 딕셔너리(인수로 전달된 두 번째 딕셔너리)에 이미 존재하는 키가 있다면, 해당 키의 값은 덮어쓰여집니다.
- 새로운 키: 존재하지 않는 키는 기존 딕셔너리에 추가됩니다.
dict_a = {'name': 'Max', 'age': 28}
dict_b = {'age': 30, 'city': 'Seoul'}
dict_a.update(dict_b)
print(dict_a)
## 출력: {'name': 'Max', 'age': 30, 'city': 'Seoul'}
7. 딕셔너리 순회 (Iteration/Looping)
- for in 루프를 사용하여 딕셔너리를 순회하는 방법
- 1. 키 순회: 딕셔너리 객체 자체를 순회하거나, 명시적으로 .keys() 메서드를 사용
- 2. 값 순회: .values() 메서드를 사용
- 3. 키와 값 모두 순회: .items() 메서드를 사용하고 두 변수(key, value)로 언팩(unpack)
my_dict = {'name': 'Max', 'age': 28, 'city': 'Boston'}
# 키 순회
for key in my_dict:
print("key:", key)
## 출력:
# key: name
# key: age
# key: city
# 값 순회
for value in my_dict.values():
print("value:", value)
## 출력:
# value: Max
# value: 28
# value: Boston
# 키와 값 모두
for key, value in my_dict.items():
print(f"{key}: {value}")
## 출력:
# name: Max
# age: 28
# city: Boston
8. 가능한 키 타입
- 딕셔너리에서 키로 사용할 수 있는 타입에는 제약
- 키는 불변(immutable) 타입이어야 함
- 가능한 키 타입
- 문자열 (String)
- 숫자 (Number): 정수나 실수 같은 숫자도 키로 사용
- 튜플 (Tuple): 튜플이 불변 요소만을 포함하는 경우에만 키로 사용 가능
-
- 주의: 숫자 타입의 키를 사용하는 경우, 리스트처럼 인덱스 번호(예: my_dict)로 접근하려고 하면 KeyError가 발생
- 반드시 실제 키(예: my_dict)를 사용
my_dict = {
'name': 'Max',
100: 'Score',
(1, 2): 'TupleKey'
}
print(my_dict)
## 출력: {'name': 'Max', 100: 'Score', (1, 2): 'TupleKey'}
- 불가능한 키 타입
- 리스트 (List): 리스트는 생성 후 변경될 수 있는 가변(mutable) 타입이기 때문에 키로 사용할 수 없음
- 리스트는 해시 가능하지 않으며, 키로 사용하려고 하면 TypeError가 발생
- 리스트 (List): 리스트는 생성 후 변경될 수 있는 가변(mutable) 타입이기 때문에 키로 사용할 수 없음
try:
my_dict = {[1, 2, 3]: 'ListKey'}
except TypeError as e:
print("오류 발생:", e)
## 출력: 오류 발생: unhashable type: 'list'
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
| [파이썬 / 기본] String " " (0) | 2025.10.19 |
|---|---|
| [파이썬 / 기본] Set {} 집합 (0) | 2025.10.17 |
| [파이썬 / 기본] Tuple () (0) | 2025.10.15 |
| [파이썬 / 기본] Lists (0) | 2025.10.15 |
| [SWEA] 파이썬 SW문제해결 기본 - List1 (1) | 2023.09.24 |