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()을 호출하면 어떻게 되나요?
A. 키 - 값 쌍만 제거합니다
B. 지정된 키에 대한 값을 제거하고 반환합니다
C. 값을 반환하기만 하고 제거하지는 않습니다
D. 딕셔너리의 모든 항목을 제거합니다

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}를 사용하여 두 딕셔너리를 병합할 때, 두 딕셔너리에 동일한 키가 있으면 어떻게 되나요?
A. dict_b의 값이 dict_a의 값을 덮어씁니다
B. dict_a의 값이 dict_b의 값을 덮어씁니다
C. 두 값이 리스트로 유지됩니다
D. 오류가 발생합니다

관련 링크