본문 바로가기

프로그래밍/Python

[파이썬 / 기본] Dictionary {}

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
# {} 사용
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 블록 사용: 키 접근을 시도하고, 예외가 발생하면 이를 포착하여 처리
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가 발생
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