dict 타입은 이 패턴을 더 간단히 사용할 수 있게 해주는 setdefault 메서드를 제공한다. setdefault는 딕셔너리에서 키를 사용해 값을 가져오려고 시도한다. 이 메서드는 키가 없으면 제공받은 디폴트 값을 키에 연관시켜 딕셔너리에 대입한 다음, 키에 연관된 값을 반환한다. 이 값은 새로 저장된 디폴트 값일 수도 있고, 이미 딕셔너리에 있던 키에 해당하는 값일 수도 있다. 위에서 본 get과 똑같은 로직을 setdefault를 사용해 더 개선한 코드는 다음과 같다.
names = votes.setdefault(key, []) names.append(who)
이 코드는 예상대로 작동하며 get과 대입식을 사용하는 것보다 더 짧다. 하지만 이 접근 방법은 가독성이 그다지 좋지 않다. 메서드 이름인 setdefault는 이 메서드의 동작을 직접적으로 분명히 드러내지 못한다. 왜 값을 얻는 메서드인데 이름이 set일까? 이름을 get_or_set이라고 붙이지 않은 이유는 뭘까? 단지 개인적 취향을 이야기하는 것처럼 들릴지도 모르지만, 파이썬에 능숙하지 않은 사람이 이 코드를 읽자마자 무엇을 하려는 것인지 바로 이해하기는 어려울 것이다. setdefault라는 이름이 함수 자신의 역할을 제대로 설명하지 못하기 때문이다.