더북(TheBook)

in을 사용하면 키가 있는 경우에는 키를 두 번 읽어야 하고, 키가 없는 경우에는 값을 한 번 대입해야 한다. 이 예제는 키가 존재하지 않을 때 맹목적으로 빈 리스트를 디폴트 값으로 대입할 수 있기 때문에 카운터 예제와는 다르다. 이중 대입문인 votes[key] = names = []는 키 대입을 두 줄이 아니라 한 줄로 처리한다. 디폴트 값으로 빈 리스트를 딕셔너리에 넣고 나면 참조를 통해 리스트 내용을 변경할 수 있으므로, append를 호출한 다음 리스트를 다시 딕셔너리에 대입할 필요는 없다.

딕셔너리 값이 리스트인 경우 KeyError 예외가 발생한다는 사실에 의존할 수도 있다. 이 접근 방법을 사용하면 키가 있을 때는 키를 한 번만 읽으면 되고, 키가 없을 때는 키를 한 번 읽고 값을 한 번 대입하면 된다. 이 방법은 in 조건문을 사용하는 경우보다 더 효율적이다.

try:
    names = votes[key]
except KeyError:
    votes[key] = names = []
    
names.append(who)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.