试图做到这一点:Unhashable类型的错误
ls = np.empty
ls =getColA()
rs = np.empty
rs=getColG()
x = dict(itertools.izip(ls,rs))
,并收到此错误:
TypeError: unhashable type: 'numpy.ndarray'
将不胜感激,如果有人可以帮助我。
试图做到这一点:Unhashable类型的错误
ls = np.empty
ls =getColA()
rs = np.empty
rs=getColG()
x = dict(itertools.izip(ls,rs))
,并收到此错误:
TypeError: unhashable type: 'numpy.ndarray'
将不胜感激,如果有人可以帮助我。
A dict
必须将密钥设置为可哈希类型。
您正尝试使用非可散列类型(numpy.ndarray)创建一个类型。
这就是为什么你会得到这个错误。
在你的情况下,你可以这样做:
x = dict(itertools.izip(tuple(ls),rs))
当您使用itertools.izip(ls,rs)
第一列将包含没有可哈希站的字典键的numpy的阵列。
您必须将它们转换为可排序迭代,如tuple
。另外如果你想连接两个numpy阵列沿它们的第二轴,最好使用np.column_stack()
而不是itertools.izip()
。
另外目前还不清楚getColA
对象是什么以及它返回的是什么。也许你可以修改该可调用对象,以便获得更加正确的结果。
有几件事情是没有意义
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.]))]
为什么要使用一个数组作为字典键?
我应该用什么来代替?我有xlsx文件中的列,我需要组合为元组 – Hassaan
@Hassaan你必须使用像元组一样的可排列类型,例如'x = dict(itertools.izip(tuple(ls),rs))' – user312016
Thanks很多你的帮助 – Hassaan