딕셔너리 안에 나라 이름이 들어 있는지 여부와 관계없이 각 집합에 새 도시를 추가할 때 setdefault를 사용할 수 있다. 이 방법은 get 메서드와 대입식(파이썬 3.8부터 사용할 수 있음)을 사용하는 방식보다 코드가 훨씬 짧다.
visits.setdefault('프랑스', set()).add('칸') # 짧다 if (japan := visits.get('일본')) is None: # 길다 visits['일본'] = japan = set() japan.add('교토') print(visits) >>> {'미국': {'로스엔젤레스', '뉴욕'}, '일본': {'하코네', '교토'}, '프랑스': {'칸'}}
직접 딕셔너리 생성을 제어할 수 있다면 어떨까? 예를 들어 클래스 내부에서 상태를 유지하기 위해 딕셔너리 인스턴스를 사용할 때가 이런 경우에 해당한다. 다음 코드에서는 앞에서 본 예제를 클래스로 감싸서 딕셔너리에 저장된 동적인 내부 상태에 접근할 수 있는 도우미 메서드를 제공한다.
class Visits: def __init__(self): self.data = {} def add(self, country, city): city_set = self.data.setdefault(country, set()) city_set.add(city)