더북(TheBook)

다행히 collections 내장 모듈에 있는 defaultdict 클래스는 키가 없을 때 자동으로 디폴트 값을 저장해서 이런 용법을 간단히 처리할 수 있게 해준다. 키가 없을 때 디폴트 값을 만들기 위해 호출할 함수만 제공하면 된다(아이템 48 “간단한 인터페이스의 경우 클래스 대신 함수를 받아라”의 예제 참조). 다음 코드는 defaultdict를 사용해 Visits 클래스를 다시 작성한 것이다.

from collections import defaultdict

class Visits:
    def __init__(self):
        self.data = defaultdict(set)
        
    def add(self, country, city):
        self.data[country].add(city)
        
visits = Visits()
visits.add("영국", "배스")
visits.add("영국", "런던")
print(visits.data)

 

>>>
defaultdict(<class 'set'>, {'영국': {'배스', '런던'}})