Python 딕셔너리의 고급 활용법
안녕하세요, 소프트웨어 공장의 독자 여러분! 오늘은 Python 딕셔너리를 더 효율적으로 활용하는 방법에 대해 알아보겠습니다. 딕셔너리는 Python에서 매우 유용하게 사용되는 데이터 구조입니다. 기본적인 사용법은 이미 잘 알고 계실 테지만, 고급 활용법을 통해 좀 더 깔끔하고 효율적인 코드를 작성할 수 있는 방법들을 소개하고자 합니다. 이 글에서는 고급 딕셔너리 활용 팁과 테크닉을 몇 가지 공유하겠습니다.
딕셔너리 기본 복습
먼저 간단하게 딕셔너리의 기본적인 사용법을 복습해 보겠습니다. 딕셔너리는 키와 값의 쌍으로 데이터를 저장하는 데 사용됩니다.
# 딕셔너리 생성 예시
dict_example = {
"name": "Alice",
"age": 25,
"city": "Seoul"
}
# 값 접근하기
print(dict_example["name"]) # 출력: Alice
딕셔너리는 name
, age
, city
와 같은 키를 사용해 값에 접근할 수 있습니다. 이제 좀 더 고급스러운 활용법들을 살펴보겠습니다.
1. 딕셔너리 컴프리헨션(Dictionary Comprehension)
딕셔너리 컴프리헨션을 사용하면 매우 간결하게 딕셔너리를 생성할 수 있습니다. 리스트 컴프리헨션과 유사하게, 조건을 사용하여 새로운 딕셔너리를 쉽게 만들 수 있습니다.
# 기존 리스트를 딕셔너리로 변환
data = [1, 2, 3, 4]
square_dict = {x: x ** 2 for x in data}
print(square_dict) # 출력: {1: 1, 2: 4, 3: 9, 4: 16}
여기서 {x: x ** 2 for x in data}
는 리스트의 각 항목을 키로, 그 제곱 값을 값으로 하는 딕셔너리를 생성하는 코드입니다.
2. get()
메소드의 유용한 활용
딕셔너리에서 키를 사용할 때 키가 없으면 KeyError
가 발생하는 경우가 많습니다. 이런 문제를 방지하기 위해 get()
메소드를 사용하여 기본값을 지정할 수 있습니다.
person = {"name": "Bob", "age": 30}
# 존재하지 않는 키에 접근 시도
gender = person.get("gender", "unknown")
print(gender) # 출력: unknown
get()
메소드를 사용하면 키가 존재하지 않을 때 기본값을 반환할 수 있어 코드의 안전성이 높아집니다.
3. 딕셔너리 병합하기
Python 3.9부터는 두 개의 딕셔너리를 쉽게 병합할 수 있는 |
연산자를 사용할 수 있습니다.
dict_a = {"a": 1, "b": 2}
dict_b = {"b": 3, "c": 4}
merged_dict = dict_a | dict_b
print(merged_dict) # 출력: {'a': 1, 'b': 3, 'c': 4}
위 코드에서 dict_a
와 dict_b
를 |
연산자를 사용해 병합했습니다. 중복되는 키가 있을 경우, 오른쪽 딕셔너리의 값으로 덮어씌워집니다.
4. defaultdict
사용하기
collections
모듈의 defaultdict
를 사용하면 딕셔너리에서 기본값을 쉽게 설정할 수 있습니다. 주로 값이 리스트나 정수와 같은 초기값이 필요한 경우에 유용합니다.
from collections import defaultdict
# 기본값이 int인 defaultdict 생성
count_dict = defaultdict(int)
items = ["apple", "banana", "apple", "orange", "banana", "apple"]
for item in items:
count_dict[item] += 1
print(count_dict) # 출력: {'apple': 3, 'banana': 2, 'orange': 1}
defaultdict
를 사용하면 키가 존재하지 않을 때 자동으로 기본값을 설정해주기 때문에 편리합니다.
5. 딕셔너리의 키와 값 뒤집기
딕셔너리의 키와 값을 뒤집어야 하는 경우가 있습니다. 이럴 때는 딕셔너리 컴프리헨션을 활용하여 간단하게 뒤집을 수 있습니다.
original_dict = {"a": 1, "b": 2, "c": 3}
inverted_dict = {value: key for key, value in original_dict.items()}
print(inverted_dict) # 출력: {1: 'a', 2: 'b', 3: 'c'}
original_dict.items()
를 사용하여 키와 값을 순회하면서 뒤집어진 딕셔너리를 생성할 수 있습니다.
6. items()
, keys()
, values()
의 효율적 사용
딕셔너리를 순회할 때 items()
, keys()
, values()
메소드를 사용하면 효율적입니다.
items()
: 키와 값을 함께 순회할 때 사용합니다.keys()
: 키만 순회할 때 사용합니다.values()
: 값만 순회할 때 사용합니다.
person = {"name": "Charlie", "age": 28, "city": "Busan"}
# 키와 값 함께 순회
for key, value in person.items():
print(f"{key}: {value}")
# 키만 순회
for key in person.keys():
print(key)
# 값만 순회
for value in person.values():
print(value)
이 메소드를 적절히 사용하면 딕셔너리를 좀 더 효율적으로 다룰 수 있습니다.
7. 딕셔너리의 필터링
조건에 따라 딕셔너리를 필터링해야 할 때 딕셔너리 컴프리헨션을 사용할 수 있습니다.
scores = {"Alice": 85, "Bob": 70, "Charlie": 90, "David": 60}
# 점수가 80 이상인 항목만 필터링
passed = {key: value for key, value in scores.items() if value >= 80}
print(passed) # 출력: {'Alice': 85, 'Charlie': 90}
딕셔너리 컴프리헨션을 사용하면 조건을 만족하는 항목만 간단하게 필터링할 수 있습니다.
8. 중첩 딕셔너리 다루기
딕셔너리 안에 딕셔너리가 있는 경우, 중첩된 구조를 다루는 방법도 알아두면 좋습니다. 중첩 딕셔너리에 접근할 때는 키를 단계적으로 접근하거나 get()
메소드를 중첩해서 사용하는 것이 좋습니다.
nested_dict = {
"person1": {"name": "Eve", "age": 30},
"person2": {"name": "Frank", "age": 25}
}
# 중첩된 값 접근하기
print(nested_dict["person1"]["name"]) # 출력: Eve
# 안전하게 접근하기
age = nested_dict.get("person2", {}).get("age", "unknown")
print(age) # 출력: 25
중첩된 딕셔너리에 접근할 때 get()
을 사용하면 키가 없는 경우에도 안전하게 기본값을 반환할 수 있습니다.
9. 딕셔너리에서 최대/최소 값 찾기
딕셔너리에서 최대값이나 최소값을 찾아야 할 때는 max()
또는 min()
함수를 사용할 수 있습니다.
scores = {"Alice": 85, "Bob": 70, "Charlie": 90, "David": 60}
# 최대 점수를 받은 사람 찾기
max_person = max(scores, key=scores.get)
print(max_person) # 출력: Charlie
# 최소 점수를 받은 사람 찾기
min_person = min(scores, key=scores.get)
print(min_person) # 출력: David
max()
와 min()
함수의 key
매개변수에 scores.get
을 전달하여 값을 기준으로 최대 또는 최소를 찾을 수 있습니다.
마무리
오늘은 Python 딕셔너리의 고급 활용법에 대해 살펴보았습니다. 딕셔너리는 매우 강력하고 유연한 데이터 구조로, 이를 잘 활용하면 코드를 더욱 효율적이고 간결하게 작성할 수 있습니다. 딕셔너리 컴프리헨션, defaultdict
, 키와 값의 필터링 등 다양한 테크닉을 실전에 적용해 보세요.
'Python > Python' 카테고리의 다른 글
Python 자료구조 알아보기: 리스트, 튜플, 딕셔너리, 집합(Set)의 차이점 (0) | 2025.06.28 |
---|---|
파이썬의 집합(Set) 자료형 소개 (0) | 2025.06.27 |
Python의 딕셔너리 자료구조 소개 (0) | 2025.06.25 |
Python 튜플의 고급 기능과 효과적으로 다루는 방법 (0) | 2025.06.24 |
Python 튜플(Tuple) 소개 (0) | 2025.06.23 |