2016-12-04 76 views
0

试图做到这一点:Unhashable类型的错误

ls = np.empty 
ls =getColA() 
rs = np.empty 
rs=getColG() 
x = dict(itertools.izip(ls,rs)) 

,并收到此错误:

TypeError: unhashable type: 'numpy.ndarray' 

将不胜感激,如果有人可以帮助我。

回答

0

A dict必须将密钥设置为可哈希类型。

您正尝试使用非可散列类型(numpy.ndarray)创建一个类型。

这就是为什么你会得到这个错误。

在你的情况下,你可以这样做:

x = dict(itertools.izip(tuple(ls),rs)) 
+0

我应该用什么来代替?我有xlsx文件中的列,我需要组合为元组 – Hassaan

+0

@Hassaan你必须使用像元组一样的可排列类型,例如'x = dict(itertools.izip(tuple(ls),rs))' – user312016

+0

Thanks很多你的帮助 – Hassaan

2

当您使用itertools.izip(ls,rs)第一列将包含没有可哈希站的字典键的numpy的阵列。

您必须将它们转换为可排序迭代,如tuple。另外如果你想连接两个numpy阵列沿它们的第二轴,最好使用np.column_stack()而不是itertools.izip()

另外目前还不清楚getColA对象是什么以及它返回的是什么。也许你可以修改该可调用对象,以便获得更加正确的结果。

+0

我如何渲染一个numpy数组hashable?或者我应该使用什么数据结构作为关键? – Hassaan

+0

@Hassaan *你必须将它们转换为像tuple一样的可哈希迭代。另外,如果你想连接两个numpy数组沿其第二轴,最好使用np.column_stack()而不是itertools.izip()。* – Kasramvd

+0

对不起,因为变慢,我找到了你。谢谢 – Hassaan

0

有几件事情是没有意义

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.]))] 

为什么要使用一个数组作为字典键?

+0

getColA()从excel文件的单元格返回一些数据的数组。我想结合两列不同的excel文件,以便将它们用作字典。 – Hassaan

+0

正如你所说,我是python的新手,并试图掌握结构和语法。分配np.empty是试图定义它的类型,但是如何变量在python中工作是困惑的。 – Hassaan

+0

你需要给出一个具体的例子,用实数和数组。字典键应该是什么样子的? – hpaulj

相关问题