11.4 역방향 조회
사전 d와 키 k가 있으면 값 v = d[k]는 쉽게 찾을 수 있다. 이런 작업을 조회(lookup)라고 한다.
만약 v만 알고 k를 찾아야 한다면? 여기엔 두 가지 문제가 있다. 첫째, 값 v와 연결된 키가 하나가 아닐 수 있다는 점이다. 애플리케이션에 따라 값 v와 연결된 키 하나만 고르거나 값 v와 연결된 전체 키에 대한 리스트를 만들어야 할 수도 있다. 둘째, 역방향 조회(reverse lookup)를 위한 간단한 구문이 없다는 점이다. 즉, 검색을 해야 한다.
다음은 값을 받아서 값과 연결된 첫 번째 키를 반환하는 함수다.
def reverse_lookup(d, v):
for k in d:
if d[k] == v:
return k
raise LookupError()
이 함수는 검색 패턴의 예이기도 하지만, 지금까지 우리가 본 적이 없는 raise를 사용한다. raise 문은 예외를 일으킨다. 여기서는 LookupError()를 일으키는데, 이는 내장 예외로 조회 작업이 실패했음을 나타낼 때 쓰인다.
루프를 끝까지 돌았는데도 사전에서 값으로 v가 없었다면 예외를 일으킨다.