본문 바로가기

Python

3-3. 딕셔너리(Dictionary)의 개념과 키-값 구조

파이썬 딕셔너리의 개념과 키-값 구조 타이틀

안녕하세요! 지난 시간에는 리스트와 비슷하지만 불변성이라는 중요한 차이를 가진 튜플(Tuple)에 대해 알아보았습니다. 이제 순서가 있는 여러 데이터를 묶어서 관리하는 두 가지 방법을 익히셨죠!

이번 시간에는 파이썬에서 데이터를 저장하고 관리하는 또 하나의 매우 강력하고 유용한 자료구조인 **딕셔너리(Dictionary)**에 대해 알아보겠습니다. 딕셔너리는 '키(Key)'와 '값(Value)'이 짝을 이루는 형태로 데이터를 저장하며, 사전(dictionary)처럼 키를 통해 값을 찾아내는 방식이 특징입니다.

마치 영어 사전에서 단어(키)를 찾으면 그에 해당하는 의미(값)를 얻는 것과 같습니다. 그럼, 딕셔너리의 세계로 들어가 볼까요?


Part 1: 딕셔너리(Dictionary)란 무엇인가?

파이썬의 딕셔너리는 다음과 같은 특징을 가집니다.

  • 키(Key)와 값(Value) 쌍: 데이터를 키: 값의 형태로 저장합니다. 각 키는 고유하며, 이 키를 통해 해당 값에 접근합니다.
  • 순서가 없다 (Python 3.7+부터는 삽입 순서 보장): 과거에는 딕셔너리에 저장된 데이터의 순서가 보장되지 않았지만, 파이썬 3.7 버전부터는 데이터가 삽입된 순서가 유지됩니다. 하지만 인덱스 번호로 접근하는 리스트/튜플과는 여전히 다릅니다.
  • 키는 고유해야 한다: 하나의 딕셔너리 안에서 같은 키는 존재할 수 없습니다. 만약 같은 키로 새 값을 할당하면 기존 값이 덮어씌워집니다.
  • 값은 중복 가능: 값은 중복될 수 있습니다.
  • 변경 가능하다 (mutable): 딕셔너리의 요소를 추가, 삭제, 변경할 수 있습니다.
  • 키의 조건: 키는 불변(Immutable) 객체만 사용 가능합니다. (예: 숫자, 문자열, 튜플) 리스트는 변경 가능하므로 키로 사용할 수 없습니다.

1. 딕셔너리 만들기

딕셔너리는 중괄호({}) 안에 키: 값 쌍을 쉼표(,)로 구분하여 나열하는 방식으로 만듭니다.

예시:

Python
 
# 파일 이름: dictionary_creation.py

# 기본적인 딕셔너리 만들기
person = {
    "name": "김철수",
    "age": 30,
    "city": "서울"
}

# 키는 숫자, 값은 문자열
student_grades = {
    101: "A",
    102: "B+",
    103: "C"
}

# 다양한 자료형의 값을 포함할 수 있습니다. (리스트, 튜플 등)
product_info = {
    "product_id": "P001",
    "name": "무선 이어폰",
    "price": 120000,
    "colors": ["블랙", "화이트", "핑크"],
    "spec": ("블루투스 5.0", "방수"),
    "is_available": True
}

# 빈 딕셔너리 만들기
empty_dict = {}

print("사람 정보:", person)
print("학생 성적:", student_grades)
print("제품 정보:", product_info)
print("빈 딕셔너리:", empty_dict)

print("person의 자료형:", type(person))

 
# 파일 이름: dictionary_creation.py

# 기본적인 딕셔너리 만들기
person = {
    "name": "김철수",
    "age": 30,
    "city": "서울"
}

# 키는 숫자, 값은 문자열
student_grades = {
    101: "A",
    102: "B+",
    103: "C"
}

# 다양한 자료형의 값을 포함할 수 있습니다. (리스트, 튜플 등)
product_info = {
    "product_id": "P001",
    "name": "무선 이어폰",
    "price": 120000,
    "colors": ["블랙", "화이트", "핑크"],
    "spec": ("블루투스 5.0", "방수"),
    "is_available": True
}

# 빈 딕셔너리 만들기
empty_dict = {}

print("사람 정보:", person)
print("학생 성적:", student_grades)
print("제품 정보:", product_info)
print("빈 딕셔너리:", empty_dict)

print("person의 자료형:", type(person))

[VS Code 터미널 출력]

파이썬 딕셔너리 생성 및 자료형 확인 예시

 


Part 2: 딕셔너리 요소 접근 및 변경하기

딕셔너리의 값은 키를 사용하여 접근하고 변경할 수 있습니다.

1. 키를 이용한 값 접근하기

  • 대괄호([]) 안에 키를 넣어 해당 키에 연결된 값을 가져옵니다.
  • 존재하지 않는 키에 접근하면 KeyError가 발생합니다.

예시:

Python
 
# 파일 이름: dict_access.py

person = {
    "name": "박영희",
    "age": 25,
    "city": "부산"
}

# 키로 값 접근
print(f"이름: {person['name']}")
print(f"나이: {person['age']}")

# 존재하지 않는 키 접근 시도 (오류 발생!)
# print(person['gender']) # KeyError: 'gender'

 
# 파일 이름: dict_access.py

person = {
    "name": "박영희",
    "age": 25,
    "city": "부산"
}

# 키로 값 접근
print(f"이름: {person['name']}")
print(f"나이: {person['age']}")

# 존재하지 않는 키 접근 시도 (오류 발생!)
# print(person['gender']) # KeyError: 'gender'

[VS Code 터미널 출력]

파이썬 딕셔너리 키로 값 접근 예시

 

2. 키를 이용한 값 변경 및 추가

  • 기존에 존재하는 키에 새로운 값을 할당하면 해당 키의 값이 변경됩니다.
  • 새로운 키에 값을 할당하면 새로운 키: 값 쌍이 딕셔너리에 추가됩니다.

예시:

Python
 
# 파일 이름: dict_modify_add.py

student = {
    "name": "이민준",
    "grade": 3,
    "major": "컴퓨터공학"
}
print(f"원본 딕셔너리: {student}")

# 기존 키의 값 변경
student["grade"] = 4
print(f"학년 변경 후: {student}")

# 새로운 키:값 쌍 추가
student["gpa"] = 4.3 # 학점 추가
student["email"] = "minjun.lee@example.com"
print(f"정보 추가 후: {student}")

# 이미 있는 키에 값 할당하면 업데이트 됨 (추가 아님)
student["major"] = "인공지능"
print(f"전공 변경 후: {student}")

 
# 파일 이름: dict_modify_add.py

student = {
    "name": "이민준",
    "grade": 3,
    "major": "컴퓨터공학"
}
print(f"원본 딕셔너리: {student}")

# 기존 키의 값 변경
student["grade"] = 4
print(f"학년 변경 후: {student}")

# 새로운 키:값 쌍 추가
student["gpa"] = 4.3
student["email"] = "minjun.lee@example.com"
print(f"정보 추가 후: {student}")

# 이미 있는 키에 값 할당하면 업데이트 됨 (추가 아님)
student["major"] = "인공지능"
print(f"전공 변경 후: {student}")

[VS Code 터미널 출력]

파이썬 딕셔너리 키로 값 변경 및 추가 예시

 


Part 3: 딕셔너리 요소 삭제하기

딕셔너리에서도 원치 않는 키: 값 쌍을 삭제할 수 있습니다.

1. del 키워드 사용

  • del 키워드와 함께 삭제할 키를 지정합니다.
  • 존재하지 않는 키를 삭제하려 하면 KeyError가 발생합니다.

예시:

Python
 
# 파일 이름: dict_del_key.py

user_profile = {
    "id": "user123",
    "username": "coder_kim",
    "email": "coder@example.com",
    "last_login": "2024-06-20"
}
print(f"원본 프로필: {user_profile}")

# 'last_login' 키와 값 삭제
del user_profile["last_login"]
print(f"'last_login' 삭제 후: {user_profile}")

# 존재하지 않는 키 삭제 시도 (오류 발생!)
# del user_profile["password"] # KeyError: 'password'

 
# 파일 이름: dict_del_key.py

user_profile = {
    "id": "user123",
    "username": "coder_kim",
    "email": "coder@example.com",
    "last_login": "2024-06-20"
}
print(f"원본 프로필: {user_profile}")

# 'last_login' 키와 값 삭제
del user_profile["last_login"]
print(f"'last_login' 삭제 후: {user_profile}")

# 존재하지 않는 키 삭제 시도 (오류 발생!)
# del user_profile["password"] # KeyError: 'password'

[VS Code 터미널 출력]

파이썬 딕셔너리에서 del 키워드로 요소 삭제 예시

 


Part 4: 딕셔너리 관련 유용한 함수 및 메서드

딕셔너리를 다룰 때 유용한 몇 가지 기능들을 추가로 알아봅시다.

1. 딕셔너리 길이 확인하기 (len() 함수)

  • len() 함수는 딕셔너리의 키: 값 쌍의 개수(요소의 개수)를 반환합니다.

예시:

Python
 
# 파일 이름: dict_len.py

my_dict = {"a": 1, "b": 2, "c": 3}
print(f"딕셔너리의 길이: {len(my_dict)}") # 3

empty_dict = {}
print(f"빈 딕셔너리의 길이: {len(empty_dict)}") # 0

2. 키 존재 여부 확인하기 (in 연산자)

  • 특정 키가 딕셔너리 안에 있는지 in 연산자를 사용하여 확인할 수 있습니다. 결과는 불린(True/False)입니다.

예시:

Python
 
# 파일 이름: dict_in_operator.py

person = {"name": "김철수", "age": 30}

print(f"'name' 키가 딕셔너리에 있는가? {'name' in person}") # True
print(f"'city' 키가 딕셔너리에 있는가? {'city' in person}") # False

if "age" in person:
    print(f"나이: {person['age']}")
else:
    print("나이 정보가 없습니다.")

3. get() 메서드 - 안전하게 값 가져오기

  • get(key, default_value) 메서드를 사용하면 키가 존재하지 않을 때 KeyError를 발생시키는 대신, 미리 정의된 default_value를 반환하도록 할 수 있습니다. default_value를 지정하지 않으면 None을 반환합니다.

예시:

Python
 
# 파일 이름: dict_get_method.py

student_info = {"id": "S001", "name": "김미영", "major": "경영학"}

# 존재하는 키
student_id = student_info.get("id")
print(f"학생 ID: {student_id}")

# 존재하지 않는 키 (기본값 없음 -> None 반환)
email = student_info.get("email")
print(f"이메일: {email}") # None

# 존재하지 않는 키 (기본값 지정)
phone = student_info.get("phone", "정보 없음")
print(f"전화번호: {phone}") # 정보 없음

 
# 파일 이름: dict_utility_methods.py

# 딕셔너리 길이 확인 (len())
my_dict = {"a": 1, "b": 2, "c": 3}
print(f"딕셔너리의 길이: {len(my_dict)}")

# 키 존재 여부 확인 (in 연산자)
person = {"name": "김철수", "age": 30}
print(f"'name' 키가 딕셔너리에 있는가? {'name' in person}")
print(f"'city' 키가 딕셔너리에 있는가? {'city' in person}")

# get() 메서드 - 안전하게 값 가져오기
student_info = {"id": "S001", "name": "김미영", "major": "경영학"}
student_id = student_info.get("id")
print(f"학생 ID: {student_id}")

email = student_info.get("email")
print(f"이메일: {email}")

phone = student_info.get("phone", "정보 없음")
print(f"전화번호: {phone}")

[VS Code 터미널 출력]

파이썬 딕셔너리 len, in, get 메서드 사용 예시

 


마무리하며

이번 시간에는 파이썬의 핵심 자료구조 중 하나인 **딕셔너리(Dictionary)**에 대해 자세히 알아보았습니다. 딕셔너리는 키: 값 쌍으로 데이터를 저장하며, 키를 통해 효율적으로 데이터에 접근하고 관리할 수 있습니다. 특히 키는 고유해야 하며 불변 객체만 사용 가능하다는 점을 기억해주세요.

딕셔너리는 실제 데이터베이스처럼 특정 정보를 빠르게 찾아야 할 때 매우 유용하게 사용됩니다.

다음 포스팅에서는 리스트, 튜플, 딕셔너리와는 또 다른 특징을 가진 자료구조인 **세트(Set)**의 개념과 중복 제거 특성에 대해 알아보겠습니다.


궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!

반응형