Python/Python

Python 딕셔너리의 고급 활용법

임베디드 친구 2025. 6. 26. 20:57
728x90
반응형

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_adict_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, 키와 값의 필터링 등 다양한 테크닉을 실전에 적용해 보세요.

728x90
반응형