3-3 딕셔너리: 키-값 쌍으로 데이터 저장하기

3-3 딕셔너리: 키-값 쌍으로 데이터 저장하기

← 목차로 돌아가기

썸네일

파이썬에서 데이터를 효율적으로 관리하는 방법은 다양합니다. 그중 딕셔너리는 ‘키(Key)’와 ‘값(Value)’이라는 독특한 쌍으로 데이터를 저장하여, 특정 정보를 빠르게 찾아내고 조작하는 데 매우 강력한 도구입니다. 이번 장에서는 딕셔너리의 기본 개념부터 생성, 접근, 수정, 삭제에 이르는 전반적인 사용법을 자세히 살펴보겠습니다.

핵심 요약:

  • 파이썬 딕셔너리는 ‘키(Key)’와 ‘값(Value)’이 짝을 이루는 데이터 구조입니다.
  • 순서보다는 키를 통한 빠른 데이터 접근이 필요한 경우에 유용하게 사용됩니다.
  • 딕셔너리는 중괄호 {}를 사용하여 생성하며, 다양한 데이터 타입을 키와 값으로 가질 수 있습니다.
  • 데이터 추가, 수정, 삭제, 조회 등 다양한 조작이 가능하여 유연한 데이터 관리를 돕습니다.

파이썬 딕셔너리란 무엇인가요?

파이썬 딕셔너리는 키(Key)와 값(Value)이 한 쌍을 이루는, 순서가 있는(Python 3.7+부터는 삽입 순서 보장) 데이터 저장 구조입니다. 제가 현업에서 데이터 분석 작업을 할 때, 사용자 프로필이나 설정 정보처럼 “이름은 홍길동, 나이는 30″과 같이 특정 이름을 통해 정보를 빠르게 찾아야 할 때 딕셔너리를 자주 사용합니다. 리스트나 튜플이 순서(인덱스)로 데이터를 관리한다면, 딕셔너리는 고유한 ‘키’를 통해 ‘값’에 접근하는 방식이죠. 마치 사전에서 단어(키)를 찾아 그 의미(값)를 얻는 것과 같습니다.

딕셔너리는 어떻게 생성하나요?

딕셔너리는 중괄호 {}를 사용하여 생성하며, ‘키: 값’ 형태의 쌍을 쉼표로 구분하여 나열합니다. 빈 딕셔너리를 만들거나, 초기 값을 가진 딕셔너리를 바로 만들 수 있습니다. 파이썬 3.11 환경에서 실습해 보겠습니다. 저의 경험상, 초기부터 어떤 데이터를 담을지 명확할 때는 바로 값을 넣는 것이 효율적입니다.

# 빈 딕셔너리 생성
empty_dict = {}
print(f"빈 딕셔너리: {empty_dict}")

# 초기 값을 가진 딕셔너리 생성
user_profile = {
    "name": "바이브 코더",
    "age": 32,
    "city": "서울",
    "is_programmer": True
}
print(f"사용자 프로필 딕셔너리: {user_profile}")

# 딕셔너리 생성 시 키는 중복될 수 없습니다. 중복되면 마지막 값이 적용됩니다.
test_dict = {"a": 1, "b": 2, "a": 3}
print(f"중복 키 테스트: {test_dict}")

이 코드가 하는 일: 빈 딕셔너리와 초기 값을 가진 딕셔너리를 생성하고, 키 중복 시의 동작을 보여줍니다.

딕셔너리 값은 어떻게 접근하고 수정하나요?

딕셔너리의 특정 값에 접근하려면 해당 값에 연결된 키를 대괄호 [] 안에 넣어 사용합니다. 값을 수정하거나 새로운 키-값 쌍을 추가하는 것도 동일한 방식으로 이루어집니다. 마치 변수 선언과 할당: 데이터 저장의 기본처럼, 원하는 위치에 값을 ‘할당’하는 개념과 비슷합니다.

user_profile = {
    "name": "바이브 코더",
    "age": 32,
    "city": "서울"
}

# 값 접근하기
print(f"사용자 이름: {user_profile['name']}")
print(f"사용자 나이: {user_profile['age']}")

# 값 수정하기
user_profile['age'] = 33
print(f"수정된 나이: {user_profile['age']}")

# 새로운 키-값 쌍 추가하기
user_profile['occupation'] = "개발자"
print(f"직업 추가 후: {user_profile}")

이 코드가 하는 일: 딕셔너리의 값을 키로 접근하고, 기존 값을 수정하며, 새로운 키-값 쌍을 추가합니다.

흔한 실수: KeyError 방지하기

존재하지 않는 키로 값에 접근하려고 하면 KeyError가 발생합니다. 예를 들어, user_profile['country']는 오류를 냅니다. 이를 방지하려면 get() 메서드를 사용하거나, 키가 존재하는지 미리 확인하는 것이 좋습니다. 저는 자동화 스크립트를 짤 때, 외부 설정 파일을 딕셔너리로 읽어올 때 이 KeyError를 정말 조심합니다.

# 존재하지 않는 키 접근 시 에러 발생
# print(user_profile['country']) # KeyError: 'country'

# get() 메서드 사용 (키가 없으면 None 반환, 또는 기본값 반환)
country = user_profile.get('country')
print(f"존재하지 않는 키(기본값 없음): {country}")

country_default = user_profile.get('country', '대한민국')
print(f"존재하지 않는 키(기본값 지정): {country_default}")

# 키 존재 여부 확인
if 'city' in user_profile:
    print(f"도시 정보가 있습니다: {user_profile['city']}")

이 코드가 하는 일: KeyError 발생 상황을 예방하기 위해 get() 메서드와 in 연산자를 사용하는 방법을 보여줍니다.

딕셔너리에서 데이터를 삭제하는 방법은 무엇인가요?

딕셔너리에서 키-값 쌍을 삭제하는 방법에는 del 키워드와 pop() 메서드가 있습니다. del은 특정 키-값 쌍을 삭제하고, pop()은 삭제와 동시에 해당 값을 반환한다는 점에서 차이가 있습니다.

student_scores = {
    "철수": 85,
    "영희": 92,
    "민수": 78,
    "수진": 95
}

# del 키워드를 사용하여 삭제
del student_scores["민수"]
print(f"민수 삭제 후: {student_scores}")

# pop() 메서드를 사용하여 삭제하고 값 반환
removed_score = student_scores.pop("영희")
print(f"영희 삭제 후: {student_scores}, 삭제된 점수: {removed_score}")

# 존재하지 않는 키 삭제 시 KeyError 발생 (pop도 동일)
# del student_scores["지훈"] # KeyError: '지훈'
# student_scores.pop("지훈") # KeyError: '지훈'

# pop()에 기본값 설정하여 KeyError 방지
no_key_score = student_scores.pop("지훈", 0) # '지훈'이 없으면 0 반환
print(f"지훈 삭제 시도 (기본값 적용): {no_key_score}")

# clear() 메서드로 모든 요소 삭제
student_scores.clear()
print(f"모든 요소 삭제 후: {student_scores}")

이 코드가 하는 일: del과 pop()을 이용해 딕셔너리 요소를 삭제하고, pop()의 기본값 활용법과 clear()로 모든 요소를 비우는 방법을 보여줍니다.

딕셔너리의 키, 값, 아이템을 어떻게 다루나요?

딕셔너리의 키, 값, 또는 키-값 쌍 전체를 얻으려면 각각 .keys(), .values(), .items() 메서드를 사용합니다. 이들은 딕셔너리 뷰 객체를 반환하며, 반복문에서 유용하게 사용됩니다. 저는 특정 조건에 맞는 데이터만 필터링할 때 이 메서드들을 반복문 for: 시퀀스 데이터 순회하기와 함께 활용하는 것을 선호합니다.

product_info = {
    "item_code": "A101",
    "name": "무선 마우스",
    "price": 25000,
    "stock": 150
}

# 모든 키 얻기
keys = product_info.keys()
print(f"모든 키: {list(keys)}")

# 모든 값 얻기
values = product_info.values()
print(f"모든 값: {list(values)}")

# 모든 키-값 쌍(아이템) 얻기
items = product_info.items()
print(f"모든 아이템: {list(items)}")

print("\n--- 딕셔너리 반복문 활용 ---")
for key in product_info.keys():
    print(f"키: {key}")

for value in product_info.values():
    print(f"값: {value}")

for key, value in product_info.items():
    print(f"키: {key}, 값: {value}")

이 코드가 하는 일: 딕셔너리의 키, 값, 아이템(키-값 쌍)을 각각 추출하고, 이를 for 반복문과 함께 사용하는 예시를 보여줍니다.

FAQ: 딕셔너리 활용에 대한 궁금증

Q1: 딕셔너리의 키로는 어떤 데이터 타입을 사용할 수 있나요?

A1: 딕셔너리의 키는 ‘해시 가능한(hashable)’ 객체여야 합니다. 일반적으로 숫자, 문자열, 튜플이 키로 사용될 수 있습니다. 리스트나 다른 딕셔너리는 변경 가능(mutable)하므로 키로 사용할 수 없습니다.

Q2: 딕셔너리는 언제 사용하면 가장 효율적인가요?

A2: 딕셔너리는 특정 이름을 통해 데이터를 빠르게 찾고 싶을 때, 그리고 데이터 간의 명확한 관계(키-값)를 표현해야 할 때 가장 효율적입니다. 예를 들어, 웹 서비스의 API 응답 데이터, 게임 캐릭터의 스탯 정보, 설정 파일 등을 다룰 때 매우 유용합니다.

Q3: 파이썬 딕셔너리도 순서가 있나요?

A3: 파이썬 3.7 버전부터는 딕셔너리에 요소를 삽입한 순서가 보장됩니다. 이전 버전(3.6 이하)에서는 순서가 보장되지 않았지만, 현재 대부분의 환경에서는 삽입 순서대로 반복하거나 출력할 수 있습니다. 2026년 현재 기준으로, 개발 시 대부분의 경우 삽입 순서가 유지된다고 생각하셔도 좋습니다.

딕셔너리는 유연하고 강력한 데이터 구조이며, 파이썬으로 복잡한 프로그램을 만들 때 필수적으로 사용됩니다. 데이터를 효율적으로 관리하고 빠르게 접근해야 하는 상황에서 딕셔너리의 가치는 빛을 발합니다. 이제 딕셔너리의 기본 사용법을 익히셨으니, 데이터 구조 간 변환과 활용 팁을 통해 다른 데이터 구조와 어떻게 연계하여 쓸 수 있을지 고민해 보는 것도 좋습니다. 다음 장에서는 중복 없는 유일한 값들의 집합인 ‘세트(Set)’에 대해 알아보겠습니다.

참고 자료

  1. [1] Python 공식 튜토리얼 — 자료 구조 — https://docs.python.org/ko/3/tutorial/datastructures.html
  2. [2] Python 표준 라이브러리 — 내장 자료형 — https://docs.python.org/ko/3/library/stdtypes.html

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다