将两个numpy数组合并为字典时报unhashable type错误如何解决
错误原因
Python 字典的键必须是**可哈希(hashable)**的不可变类型,遍历little_X_test得到的每一行A本质是numpy.ndarray类型,属于可变对象,没有固定哈希值,直接作为键就会抛出对应类型错误。
解决方法
你预期的键是数组行元素组成的元组,只需要把每一行的numpy数组转换为不可变的tuple类型即可。
修改后代码
import numpy as np little_X_test= np.array([[7.9, 3.8, 6.4, 2], [5.2, 4.1, 1.5, 0.1], [6.9, 3.1, 5.1, 2.3]]) little_y_test= np.array([2, 0, 2]) d = {} for A, B in zip(little_X_test, little_y_test): # 将numpy数组行转为元组后再作为键 d[tuple(A)] = B
也可以用更简洁的字典推导式实现相同效果:
d = {tuple(A): B for A, B in zip(little_X_test, little_y_test)}
最终生成的字典完全符合你要求的格式:{(7.9, 3.8, 6.4, 2.0): 2, (5.2, 4.1, 1.5, 0.1): 0, (6.9, 3.1, 5.1, 2.3): 2}
内容的提问来源于stack exchange,提问作者Daniel Stafford
相关产品推荐
相关产品推荐

