簡體   English   中英

無法散列的類型錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM