尝试这样做:
ls = np.empty
ls =getColA()
rs = np.empty
rs=getColG()
x = dict(itertools.izip(ls,rs))
并收到此错误:
TypeError: unhashable type: 'numpy.ndarray'
如果有人能帮助我,我们将不胜感激。
答案 0 :(得分:2)
使用itertools.izip(ls,rs)
时,第一列将包含numpy数组,这些数组不能用作字典键。
您必须将它们转换为像tuple
这样的可散列迭代。此外,如果您想沿着第二个轴连接两个numpy数组,最好使用np.column_stack()
而不是itertools.izip()
。
同样不清楚getColA
对象是什么以及它返回的是什么。也许您可以修改该可调用对象以获得更合适的结果。
答案 1 :(得分:0)
dict
必须将密钥设置为可缓存类型。
您正在尝试使用不可散列类型(numpy.ndarray)创建类型。
这就是您收到此错误的原因。
在你的情况下,你可以这样做:
x = dict(itertools.izip(tuple(ls),rs))
答案 2 :(得分:0)
有几件事情没有意义
ls = np.empty
ls =getColA()
np.empty
是一个功能。您将其分配给ls
;然后将getColA()
的结果分配给ls
。这抹去了第一个任务。您是否认为第一个赋值将ls
变量定义为数组?这不是Python的工作方式。变量没有类型。
x = dict(itertools.izip(ls,rs))
您没有告诉我们getColA()
返回什么,但错误表明它是一个数组。 1D? 2D?
这种字典构建适用于1d数组(我正在使用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.]))]
为什么要将数组用作字典键?