Python 언어는 사전에서 키로 사용할 수 있는 항목에 대해 구체적입니다. Python 사전에서 모든 키는 해시 가능해야 합니다.
사전에 키를 추가할 때 해시할 수 없는 키 유형을 사용하려고 하면 "TypeError:해시할 수 없는 유형:'dict'" 오류가 발생합니다.
이 가이드에서는 이 오류의 의미와 발생 이유에 대해 설명합니다. 코드에서 이 오류를 해결하는 방법을 배울 수 있도록 이 오류의 예를 살펴봅니다.
TypeError:해시할 수 없는 유형:'dict'
사전은 키와 값의 두 부분으로 구성됩니다. 키는 값에 바인딩된 식별자입니다. 키를 참조하면 해당 키와 연결된 값을 검색할 수 있습니다.
해시 가능한 개체만 사전의 키가 될 수 있습니다. 문자열, 정수, 튜플 및 frozenset과 같은 변경할 수 없는 개체는 몇 가지 예외를 제외하고 해시 가능합니다. 따라서 사전은 사전에서 키로 사용할 수 없습니다.
사전에 항목을 추가하려면 유효한 해시 가능 키를 지정해야 합니다. 예를 들어 "name"은 유효한 키이지만 { "name":"test" }는 유효한 키가 아닙니다.
예시 시나리오
여기서는 빵집에서 5번 이상 판매된 모든 케이크를 한 사전에서 다른 사전으로 추가하는 프로그램을 작성합니다.
각 케이크에 대한 사전이 포함된 케이크 목록을 선언하는 것으로 시작합니다. 또한 5회 이상 판매된 케이크를 저장할 수 있는 사전도 정의합니다.
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
cakes = [ { "name": "Black Forest Gateau", "sold": 3 }, { "name": "Carrot Cake", "sold": 7 }, { "name": "Coconut and Lime Cake", "sold": 9 } ] sold_more_than_five = {}
우리의 "케이크" 목록에는 3개의 사전이 있습니다. 각 사전에는 두 개의 키와 값이 있습니다. 주요 이름은 "케이크"와 "판매"입니다.
이제 케이크 목록을 살펴보고 다섯 번 이상 판매된 케이크를 찾는 for 루프를 작성합니다. 해당 케이크는 "sold_more_than_five" 사전에 추가됩니다.
for c in cakes: if c["sold"] > 5: sold_more_than_five[c] = c["sold"] print(c["name"] + " has been sold more than five times.") print(sold_more_than_five)
for 루프에서 각 사전의 "sold" 값이 5보다 큰지 비교합니다. 그렇다면 해당 항목은 "sold_more_than_five" 사전에 추가됩니다. 그런 다음 특정 케이크가 5번 이상 판매되었음을 알리는 메시지가 콘솔에 인쇄됩니다.
루프가 실행되면 "sold_more_than_five" 사전을 콘솔에 인쇄합니다.
코드를 실행하여 프로그램이 작동하는지 확인하십시오.
Traceback (most recent call last): File "main.py", line 16, in <module> sold_more_than_five[c] = c["sold"] TypeError: unhashable type: 'dict'
코드가 오류를 반환합니다.
해결책
다른 사전을 사용하여 사전 키를 생성하려고 하기 때문에 코드가 작동하지 않습니다.
"c"의 값은 "케이크" 목록의 사전과 같습니다. 이것은 "sold_more_than_five" 사전에 항목을 추가하려고 할 때 실수로 사전을 키로 추가하려고 시도한다는 것을 의미합니다.
sold_more_than_five[c] = c["sold"]
"if" 문이 "Carrot Cake" 케이크에서 실행될 때 코드는 다음을 실행하려고 합니다.
sold_more_than_five[{"name": "Carrot Cake", "sold": 7}] = 7
사전의 키로 사전을 추가하려고 하기 때문에 유효하지 않습니다. c["name"]을 사전 키의 이름으로 사용하여 이 문제를 해결할 수 있습니다.
sold_more_than_five[c["name"]] = c["sold"]
이 수정된 코드로 코드를 실행하십시오.
Carrot Cake has been sold more than five times. Coconut and Lime Cake has been sold more than five times. {'Carrot Cake': 7, 'Coconut and Lime Cake': 9}
코드가 성공적으로 실행됩니다. 이제 각 케이크의 이름을 사전이 아닌 키로 사용하고 있습니다.
결론
"TypeError:unhashable type:'dict'" 오류는 key가 unhashable 객체인 딕셔너리에서 항목을 생성하려고 하면 발생합니다. 문자열, 튜플 및 정수와 같은 변경할 수 없는 개체만 사전에서 키로 사용할 수 있습니다.
이 오류를 해결하려면 사전에 항목을 생성할 때 해시 가능한 개체만 사용해야 합니다. 이제 전문 개발자처럼 이 일반적인 Python 오류를 해결할 준비가 되었습니다!