Python初學者之TypeError: unhashable type: 'list'問題分析
阿新 • • 發佈:2019-01-25
使用Python實現機器學習k-近鄰演算法,建立資料集和標籤時,出現了“TypeError: unhashable type: 'list'”錯誤,無法正確打印出group和labels。
1、錯誤程式碼與錯誤資訊
具體程式碼例項如下:
from numpy import * import operator def creatDataSet(): group = {[[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]} labels = {'A', 'A', 'B', 'B'} return group, labels print(group) print(labels)
出現的錯誤如下:
2、錯誤原因分析
經過一番搜尋和排查,發現:原來是hash錯誤。
list 不使用 hash 值進行索引,故其對所儲存元素沒有可雜湊的要求;set / dict 使用 hash 值進行索引,也即其要求欲儲存的元素有可雜湊的要求。Python不支援dict的key為list或dict型別,因為list和dict型別是unhashable(不可雜湊)的。
>>> set([[], [], []]) TypeError: unhashable type: 'list' >>> set([{}, {}, {}]) TypeError: unhashable type: 'dict' >>> set([set(), set(), set()]) TypeError: unhashable type: 'set'
3、修改後程式碼與正確輸出
經過排查,發現賦值的括號用錯了,最外層不應使用大括號“{ }”,group應使用小括號“()”,labels應使用中括號“[ ]”,程式碼修改如下:
from numpy import * import operator def creatDataSet(): group = ([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]) labels = ['A', 'A', 'B', 'B'] print(group) print(labels) return group, labels creatDataSet()
正確結果輸出: