본문 바로가기
프로그래밍/파이썬

파이썬 - 딕셔너리

by ennak 2024. 11. 29.
반응형

Intro

파이썬의 딕셔너리는 키-값 쌍을 저장하는 강력한 자료구조다. 기본적인 사용법을 넘어, 딕셔너리의 고급 기능과 메서드를 이해하면 더욱 효율적이고 우아한 코드를 작성할 수 있다.

 

1. 딕셔너리 생성 방법

딕셔너리를 생성하는 여러 방법이 있다.

a) 중괄호 사용

my_dict = {'key1': 'value1', 'key2': 'value2'}

b) dict() 생성자 사용

my_dict = dict(key1='value1', key2='value2')

c) 리스트의 튜플로부터 생성

items = [('key1', 'value1'), ('key2', 'value2')]
my_dict = dict(items)

d) 딕셔너리 컴프리헨션

my_dict = {x: x**2 for x in range(5)}

2. 주요 딕셔너리 메서드

a) get(key[, default])

키가 존재하지 않을 때 에러 대신 기본값을 반환한다.

my_dict = {'a': 1, 'b': 2}
print(my_dict.get('c', 0))  # 출력: 0

b) setdefault(key[, default])

키가 존재하면 해당 값을, 없으면 기본값을 설정하고 반환한다.

my_dict = {'a': 1, 'b': 2}
print(my_dict.setdefault('c', 3))  # 출력: 3
print(my_dict)  # 출력: {'a': 1, 'b': 2, 'c': 3}

c) update([other])

다른 딕셔너리나 키-값 쌍으로 현재 딕셔너리를 갱신한다.

my_dict = {'a': 1, 'b': 2}
my_dict.update({'b': 3, 'c': 4})
print(my_dict)  # 출력: {'a': 1, 'b': 3, 'c': 4}

d) pop(key[, default])

지정된 키의 값을 제거하고 반환한다. 키가 없으면 기본값을 반환한다.

my_dict = {'a': 1, 'b': 2}
print(my_dict.pop('b'))  # 출력: 2
print(my_dict)  # 출력: {'a': 1}

e) popitem()

임의의 키-값 쌍을 제거하고 튜플로 반환한다 (Python 3.7부터는 마지막으로 삽입된 항목)

my_dict = {'a': 1, 'b': 2, 'c': 3}
print(my_dict.popitem())  # 출력: ('c', 3)

f) keys(), values(), items()

각각 키, 값, 키-값 쌍의 뷰를 반환한다.

my_dict = {'a': 1, 'b': 2}
print(list(my_dict.keys()))    # 출력: ['a', 'b']
print(list(my_dict.values()))  # 출력: [1, 2]
print(list(my_dict.items()))   # 출력: [('a', 1), ('b', 2)]

3. 딕셔너리 병합

Python 3.9부터는 | 연산자를 사용하여 딕셔너리를 병합할 수 있다.

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = dict1 | dict2
print(merged)  # 출력: {'a': 1, 'b': 3, 'c': 4}

 

이전 버전에서는 다음과 같이 할 수 있다.

merged = {**dict1, **dict2}

 

4. 중첩 딕셔너리

딕셔너리 안에 딕셔너리를 넣어 복잡한 데이터 구조를 만들 수 있다.

nested_dict = {
    'person1': {'name': 'Alice', 'age': 30},
    'person2': {'name': 'Bob', 'age': 25}
}

print(nested_dict['person1']['name'])  # 출력: Alice

 

5. defaultdict 사용하기

collections 모듈의 defaultdict를 사용하면 존재하지 않는 키에 대해 기본값을 자동으로 생성할 수 있다.

from collections import defaultdict

word_count = defaultdict(int)
words = ['apple', 'banana', 'apple', 'cherry']

for word in words:
    word_count[word] += 1

print(dict(word_count))  # 출력: {'apple': 2, 'banana': 1, 'cherry': 1}

 

6. OrderedDict 사용하기

Python 3.7 이전 버전에서 순서가 보장된 딕셔너리가 필요한 경우 OrderedDict를 사용할 수 있다.

from collections import OrderedDict

ordered = OrderedDict()
ordered['a'] = 1
ordered['b'] = 2
ordered['c'] = 3

print(list(ordered.keys()))  # 출력: ['a', 'b', 'c']

 

7. 딕셔너리 컴프리헨션 활용

복잡한 딕셔너리를 생성할 때 컴프리헨션을 활용하면 코드를 간결하게 만들 수 있다.

squares = {x: x**2 for x in range(10)}
print(squares)  # 출력: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares)  # 출력: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

 

8. 딕셔너리를 이용한 스위치 케이스 구현

파이썬에는 switch-case 문이 없지만, 딕셔너리를 사용하여 비슷한 기능을 구현할 수 있다.

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

operations = {
    'add': add,
    'subtract': subtract
}

result = operations['add'](5, 3)
print(result)  # 출력: 8

 

9. 딕셔너리 정렬

딕셔너리를 키나 값을 기준으로 정렬할 수 있다.

my_dict = {'b': 2, 'a': 1, 'c': 3}

# 키를 기준으로 정렬
sorted_by_key = dict(sorted(my_dict.items()))
print(sorted_by_key)  # 출력: {'a': 1, 'b': 2, 'c': 3}

# 값을 기준으로 정렬
sorted_by_value = dict(sorted(my_dict.items(), key=lambda item: item[1]))
print(sorted_by_value)  # 출력: {'a': 1, 'b': 2, 'c': 3}

 

10. 딕셔너리 복사

딕셔너리를 복사할 때는 얕은 복사와 깊은 복사를 구분해야 한다.

import copy

original = {'a': [1, 2, 3], 'b': [4, 5, 6]}

# 얕은 복사
shallow_copy = original.copy()
shallow_copy['a'][0] = 10
print(original['a'])  # 출력: [10, 2, 3]

# 깊은 복사
deep_copy = copy.deepcopy(original)
deep_copy['a'][0] = 20
print(original['a'])  # 출력: [10, 2, 3]

 

11. 딕셔너리 언패킹

함수 호출 시 딕셔너리를 언패킹하여 인자로 전달할 수 있다.

def print_info(name, age, city):
    print(f"{name} is {age} years old and lives in {city}")

info = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print_info(**info)  # 출력: Alice is 30 years old and lives in New York

 

12. 딕셔너리 뷰 객체 활용

keys(), values(), items() 메서드가 반환하는 뷰 객체는 딕셔너리의 변경사항을 실시간으로 반영한다.

my_dict = {'a': 1, 'b': 2}
keys = my_dict.keys()
print(keys)  # 출력: dict_keys(['a', 'b'])

my_dict['c'] = 3
print(keys)  # 출력: dict_keys(['a', 'b', 'c'])
반응형

'프로그래밍 > 파이썬' 카테고리의 다른 글

파이썬 - 불변(Immutable)과 가변(Mutable) 객체  (0) 2024.11.29
파이썬 - Set  (0) 2024.11.29
파이썬 - 제너레이터  (0) 2024.11.28
파이썬 - 컴프리헨션  (0) 2024.11.27
파이썬 - 튜플 개념 정리  (0) 2024.11.26