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