딕셔너리의 값(value)에는 어떠한 제한도 없습니다. 표준 객체든 사용자가 직접 정의한 객체든, 어떤 파이썬 객체든 자유롭게 저장할 수 있습니다. 하지만 키(key)는 사정이 다릅니다. 딕셔너리 키를 사용할 때 반드시 기억해야 할 두 가지 중요한 규칙이 있습니다.
1. 중복 키는 허용되지 않습니다
하나의 키에는 여러 개의 항목을 저장할 수 없습니다. 즉, 동일한 키가 여러 번 존재할 수 없습니다. 만약 딕셔너리를 생성하는 과정에서 같은 키가 여러 번 등장하면, 마지막에 할당된 값이 이전 값을 덮어쓰게 됩니다.
예제
#!/usr/bin/python3
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
print("dict['Name']: ", dict['Name'])
실행 결과
dict['Name']: Manni
위 예제에서 'Name' 키가 두 번 등장했지만, 마지막에 할당된 'Manni'가 최종 값으로 남습니다. 앞서 지정한 'Zara'는 무시됩니다.
2. 키는 반드시 불변(immutable) 타입이어야 합니다
딕셔너리 키는 해시(hash) 가능해야 하므로, 한 번 생성되면 변경할 수 없는 불변 타입이어야 합니다. 따라서 문자열, 숫자, 튜플은 키로 사용할 수 있지만, 리스트처럼 내용을 변경할 수 있는 가변(mutable) 객체는 키로 사용할 수 없습니다.
예제
#!/usr/bin/python3
dict = {['Name']: 'Zara', 'Age': 7}
print("dict['Name']: ", dict['Name'])
실행 결과
Traceback (most recent call last):
File "test.py", line 3, in <module>
dict = {['Name']: 'Zara', 'Age': 7}
TypeError: unhashable type: 'list'
리스트는 해시 불가능(unhashable)한 타입이기 때문에 딕셔너리 키로 사용할 수 없으며, 위와 같이 TypeError가 발생합니다. 만약 여러 요소를 하나의 키로 묶고 싶다면, 리스트 대신 변경할 수 없는 튜플을 사용하면 됩니다.