[英]Unhashable type error
嘗試這樣做:
ls = np.empty
ls =getColA()
rs = np.empty
rs=getColG()
x = dict(itertools.izip(ls,rs))
並得到此錯誤:
TypeError: unhashable type: 'numpy.ndarray'
如果有人可以幫助我,我將不勝感激。
當您使用itertools.izip(ls,rs)
,第一列將包含numpy數組,這些數組不可散列為字典鍵。
您必須將它們轉換為類似tuple
可哈希迭代。 另外,如果要沿第二個軸連接兩個numpy數組,最好使用np.column_stack()
而不是itertools.izip()
。
還不清楚getColA
對象是什么以及它返回什么。 也許您可以修改該可調用對象以得到更適當的結果。
dict
必須將鍵設置為可哈希類型。
您正在嘗試使用非哈希類型(numpy.ndarray)創建類型。
這就是為什么您會收到此錯誤的原因。
在這種情況下,您可以執行以下操作:
x = dict(itertools.izip(tuple(ls),rs))
有幾件事沒有道理
ls = np.empty
ls =getColA()
np.empty
是一個函數。 您將其分配給ls
; 然后將getColA()
的結果分配給ls
。 這樣就消除了第一個任務。 您是否認為第一個賦值將ls
變量定義為數組? 那不是Python的工作方式。 變量沒有類型。
x = dict(itertools.izip(ls,rs))
您沒有告訴我們getColA()
返回什么,但是錯誤表明它是一個數組。 1天? 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.]))]
為什么要使用數組作為字典鍵?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.