Python 딕셔너리
Python 에서 딕셔너리는 순서가 있는 (Python > 3.7 부터) key: value 쌍의 모음입니다.
Python 3 문서에서 발췌
딕셔너리의 주요 작업은 특정 키로 값을 저장하고 키를 주어 값을 추출하는 것입니다. 또한 del을 사용하여 키:값 쌍을 삭제하는 것도 가능합니다.
예시 딕셔너리:
# 딕셔너리: 키 - 값 쌍의 모음
my_cat = {
'size': 'fat', # key: 'size', value: 'fat'
'color': 'gray', # key: 'color', value: 'gray'
'disposition': 'loud' # key: 'disposition', value: 'loud'
}
대괄호 연산자 []를 사용한 키, 값 설정
# 대괄호 연산자를 사용하여 딕셔너리 항목 추가 또는 업데이트
my_cat = {
'size': 'fat',
'color': 'gray',
'disposition': 'loud',
}
my_cat['age_years'] = 2 # 새 키 - 값 쌍 추가
print(my_cat)
{'size': 'fat', 'color': 'gray', 'disposition': 'loud', 'age_years': 2}
대괄호 연산자 []를 사용한 값 가져오기
키가 딕셔너리에 없는 경우 KeyError가 발생합니다.
my_cat = {
'size': 'fat',
'color': 'gray',
'disposition': 'loud',
}
print(my_cat['size'])
fat
print(my_cat['eye_color'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'eye_color'
values()
values() 메서드는 딕셔너리의 값을 가져옵니다:
# .values() 메서드를 사용하여 딕셔너리 값 반복
pet = {'color': 'red', 'age': 42}
for value in pet.values(): # 모든 값을 순회
print(value)
red
42
keys()
keys() 메서드는 딕셔너리의 키를 가져옵니다:
# .keys() 메서드를 사용하여 딕셔너리 키 반복
pet = {'color': 'red', 'age': 42}
for key in pet.keys(): # 모든 키를 순회
print(key)
color
age
기본적으로 키를 순회하므로 **.keys()**를 사용할 필요가 없습니다:
# 딕셔너리를 직접 순회하면 키를 순회합니다 (기본 동작)
pet = {'color': 'red', 'age': 42}
for key in pet: # for key in pet.keys() 와 동일
print(key)
color
age
items()
items() 메서드는 딕셔너리의 항목을 가져와 튜플로 반환합니다:
pet = {'color': 'red', 'age': 42}
for item in pet.items():
print(item)
('color', 'red')
('age', 42)
keys(), values(), items() 메서드를 사용하면 for 루프를 통해 각각 딕셔너리의 키, 값 또는 키 - 값 쌍을 반복할 수 있습니다.
# .items() 메서드를 사용하여 키 - 값 쌍 반복
pet = {'color': 'red', 'age': 42}
for key, value in pet.items(): # 튜플을 키와 값으로 언패킹
print(f'Key: {key} Value: {value}')
Key: color Value: red
Key: age Value: 42
get()
get() 메서드는 주어진 키를 가진 항목의 값을 반환합니다. 키가 존재하지 않으면 None을 반환합니다:
# .get() 메서드: 안전하게 값 검색, 키가 없으면 None 반환
wife = {'name': 'Rose', 'age': 33}
f'My wife name is {wife.get("name")}' # 'Rose' 반환
'My wife name is Rose'
f'She is {wife.get("age")} years old.'
'She is 33 years old.'
f'She is deeply in love with {wife.get("husband")}'
'She is deeply in love with None'
기본값인 None을 원하는 값으로 변경할 수도 있습니다:
wife = {'name': 'Rose', 'age': 33}
f'She is deeply in love with {wife.get("husband", "lover")}'
'She is deeply in love with lover'
setdefault() 를 사용한 항목 추가
이러한 방식으로 딕셔너리에 항목을 추가할 수 있습니다:
wife = {'name': 'Rose', 'age': 33}
if 'has_hair' not in wife:
wife['has_hair'] = True
setdefault 메서드를 사용하면 동일한 코드를 더 짧게 만들 수 있습니다:
wife = {'name': 'Rose', 'age': 33}
wife.setdefault('has_hair', True)
wife
{'name': 'Rose', 'age': 33, 'has_hair': True}
항목 제거
pop()
pop() 메서드는 주어진 키를 기반으로 항목을 제거하고 반환합니다.
wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.pop('age')
33
wife
{'name': 'Rose', 'hair': 'brown'}
로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요
pop()을 호출하면 어떻게 되나요?popitem()
popitem() 메서드는 딕셔너리의 마지막 항목을 제거하고 반환합니다.
wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.popitem()
('hair', 'brown')
wife
{'name': 'Rose', 'age': 33}
del
del 메서드는 주어진 키를 기반으로 항목을 제거합니다.
wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
del wife['age']
wife
{'name': 'Rose', 'hair': 'brown'}
clear()
clear() 메서드는 딕셔너리의 모든 항목을 제거합니다.
wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.clear()
wife
{}
딕셔너리에서 키 확인하기
person = {'name': 'Rose', 'age': 33}
'name' in person.keys()
True
'height' in person.keys()
False
'skin' in person # keys() 생략 가능
False
딕셔너리에서 값 확인하기
person = {'name': 'Rose', 'age': 33}
'Rose' in person.values()
True
33 in person.values()
True
깔끔하게 출력하기 (Pretty Printing)
import pprint
wife = {'name': 'Rose', 'age': 33, 'has_hair': True, 'hair_color': 'brown', 'height': 1.6, 'eye_color': 'brown'}
pprint.pprint(wife)
{'age': 33,
'eye_color': 'brown',
'hair_color': 'brown',
'has_hair': True,
'height': 1.6,
'name': 'Rose'}
두 딕셔너리 병합
Python 3.5 이상:
dict_a = {'a': 1, 'b': 2}
dict_b = {'b': 3, 'c': 4}
dict_c = {**dict_b, **dict_a}
dict_c
{'a': 1, 'b': 3, 'c': 4}
로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요
{**dict_b, **dict_a}를 사용하여 두 딕셔너리를 병합할 때, 두 딕셔너리에 동일한 키가 있으면 어떻게 되나요?dict_b의 값이 dict_a의 값을 덮어씁니다dict_a의 값이 dict_b의 값을 덮어씁니다