試圖做到這一點:Unhashable類型的錯誤
ls = np.empty
ls =getColA()
rs = np.empty
rs=getColG()
x = dict(itertools.izip(ls,rs))
,並收到此錯誤:
TypeError: unhashable type: 'numpy.ndarray'
將不勝感激,如果有人可以幫助我。
試圖做到這一點:Unhashable類型的錯誤
ls = np.empty
ls =getColA()
rs = np.empty
rs=getColG()
x = dict(itertools.izip(ls,rs))
,並收到此錯誤:
TypeError: unhashable type: 'numpy.ndarray'
將不勝感激,如果有人可以幫助我。
A dict
必須將密鑰設置爲可哈希類型。
您正嘗試使用非可散列類型(numpy.ndarray)創建一個類型。
這就是爲什麼你會得到這個錯誤。
在你的情況下,你可以這樣做:
x = dict(itertools.izip(tuple(ls),rs))
當您使用itertools.izip(ls,rs)
第一列將包含沒有可哈希站的字典鍵的numpy的陣列。
您必須將它們轉換爲可排序迭代,如tuple
。另外如果你想連接兩個numpy陣列沿它們的第二軸,最好使用np.column_stack()
而不是itertools.izip()
。
另外目前還不清楚getColA
對象是什麼以及它返回的是什麼。也許你可以修改該可調用對象,以便獲得更加正確的結果。
有幾件事情是沒有意義
ls = np.empty
ls =getColA()
np.empty
是一個函數。您將其分配給ls
;那麼你將getColA()
的結果分配給ls
。這抹去了第一項任務。你認爲第一個作業將ls
變量定義爲數組嗎?這不是Python的工作原理。變量沒有類型。
x = dict(itertools.izip(ls,rs))
你沒有告訴我們什麼getColA()
返回,但錯誤表明它是一個數組。 1D? 2D?
這類詞典建築工程用一維數組(我使用PY3)
In [497]: dict(itertools.zip_longest(np.arange(3),np.arange(10,13)))
Out[497]: {0: 10, 1: 11, 2: 12}
但與2D
In [498]: dict(itertools.zip_longest(np.arange(6).reshape(2,3),np.ones((2,3))))
...
TypeError: unhashable type: 'numpy.ndarray'
這是因爲在2D的zip
返回數組的行,並且行本身是陣列:
In [499]: list(itertools.zip_longest(np.arange(6).reshape(2,3),np.ones((2,3))
...:))
Out[499]:
[(array([0, 1, 2]), array([ 1., 1., 1.])),
(array([3, 4, 5]), array([ 1., 1., 1.]))]
爲什麼要使用一個數組作爲字典鍵?
我應該用什麼來代替?我有xlsx文件中的列,我需要組合爲元組 – Hassaan
@Hassaan你必須使用像元組一樣的可排列類型,例如'x = dict(itertools.izip(tuple(ls),rs))' – user312016
Thanks很多你的幫助 – Hassaan