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 |