Unit 27. 딕셔너리 응용하기

딕셔너리는 다양한 메서드를 제공합니다. 이번에는 딕셔너리에 키와 값을 추가/삭제하는 메서드와 정보를 조회하는 메서드를 사용해보겠습니다. 그리고 for 반복문을 사용하여 키와 값에 접근하는 방법과 딕셔너리 안에 딕셔너리를 넣는 방법을 알아보겠습니다.

27.1 딕셔너리 조작하기

이번에는 딕셔너리를 조작하는 메서드와 정보를 얻는 메서드를 알아보겠습니다. 파이썬에서 제공하는 딕셔너리 메서드는 여러 가지가 있지만 여기서는 자주 쓰는 메서드를 설명하겠습니다.

먼저 딕셔너리를 조작하는 메서드입니다.

update(키=값)은 이름 그대로 딕셔너리에서 키의 값을 수정합니다. 단, 키가 문자열일 때만 사용할 수 있습니다. 예를 들어 딕셔너리가 x = { 'a': 10 }이라면 x.update(a=100)과 같이 키에서 작은따옴표 또는 큰따옴표를 빼고 키 이름만 지정합니다. 다음은 키 a를 100, b를 200으로 수정합니다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.update(a=100, b=200)
>>> print(x['a'], x['b'])
100 200

pop(키) 또는 pop(키, 기본값)은 특정 키-값 쌍을 삭제한 뒤 값을 반환합니다. 만약 pop에 기본값을 지정하면 딕셔너리에 키가 있을 때는 해당 키-값 쌍을 삭제한 뒤 값을 반환하지만 키가 없을 때는 기본값만 반환합니다. 다음은 키 a를 삭제합니다. 그리고 키 z는 없으므로 기본값으로 지정한 0을 반환합니다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.pop('a')
10
>>> x
{'b': 20, 'c': 30, 'd': 40}
>>> x.pop('z', 0)
0

pop 대신 del로 딕셔너리의 특정 키-값 쌍을 삭제할 수도 있습니다. 이때는 [ ] 안에 키를 지정하여 del을 사용합니다. 다음은 키 a를 삭제합니다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> del x['a']
>>> x
{'b': 20, 'c': 30, 'd': 40}

popitem()은 딕셔너리에서 임의의 키-값 쌍을 삭제합니다(파이썬 3.6 이상에서는 맨 뒤에 있는 값을 삭제합니다). 그리고 삭제된 키-값 쌍을 튜플로 반환합니다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.popitem()
('d', 40)
>>> x
{'a': 10, 'b': 20, 'c': 30}

clear()는 딕셔너리의 모든 키-값 쌍을 삭제합니다. 다음은 딕셔너리의 모든 키-값 쌍을 삭제하여 빈 딕셔너리 {}가 됩니다.

>>> <span class="n">x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.clear()
>>> x
{}

이번에는 딕셔너리에서 키의 값을 가져오거나 저장하는 메서드를 사용해보겠습니다.

get(키) 또는 get(키, 기본값)은 딕셔너리에서 특정 키의 값을 가져옵니다. 만약 get에 기본값을 지정하면 딕셔너리에 키가 있을 때 해당 키의 값을 반환하지만 키가 없을 때는 기본값을 반환합니다. 다음은 키 z가 없으므로 기본값으로 지정한 0을 반환합니다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.get('a')
10
>>> x.get('z', 0)
0

setdefault(키) 또는 setdefault(키, 기본값)은 딕셔너리에 키와 값을 추가합니다. setdefault에 키만 지정하면 값에 None을 저장하고, 기본값까지 지정하면 값에 기본값을 저장합니다. 단, setdefault로 딕셔너리에 이미 들어있는 키의 값은 수정할 수 없습니다. 다음은 키 e를 추가하고 값에 None을 저장합니다. 그리고 키 f를 추가하고 값에 100을 저장합니다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.setdefault('e')
>>> x.setdefault('f', 100)
100
>>> x
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None, 'f': 100}

키-값 쌍을 모두 가져오거나 키나 값만 가져오는 메서드도 있습니다.

items()는 딕셔너리의 키-값 쌍을 모두 가져오고 keys()는 키, values()는 값만 가져옵니다. 이 메서드들은 보통 for 반복문과 조합해서 사용하는데 자세한 내용은 뒤에서 설명하겠습니다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.items()
dict_items([('a', 10), ('b', 20), ('c', 30), ('d', 40)])
>>> x.keys()
dict_keys(['a', 'b', 'c', 'd'])
>>> x.values()
dict_values([10, 20, 30, 40])

이번에는 리스트(튜플)로 딕셔너리를 만들어보겠습니다. 먼저 keys = ['a', 'b', 'c', 'd']처럼 키가 들어있는 리스트를 준비합니다(튜플도 됩니다). 그리고 dict.fromkeys에 키가 들어있는 리스트를 넣으면 딕셔너리가 생성됩니다.

>>> keys = ['a', 'b', 'c', 'd']
>>> x = dict.fromkeys(keys)
>>> x
{'a': None, 'b': None, 'c': None, 'd': None}
>>> y = dict.fromkeys(keys, 100)
>>> y
{'a': 100, 'b': 100, 'c': 100, 'd': 100}

dict.fromkeys(키리스트)와 같이 메서드에 키 리스트만 지정하면 값은 모두 None이 저장되고, dict.fromkeys(키리스트, 값)과 같이 키 리스트와 값을 지정하면 해당 값이 딕셔너리의 값으로 저장됩니다.