最近在写程序时 需要对数组和字典进行混合处理 暴露出如题的错误 分析如下
1、错误代码
self_array [1,2,3]
self_return { code :200, message :{self_array}}
print(self_return)
提示错误
TypeError: unhashable type: list
2、错误原因分析
经过一番搜索和排查 发现 原来是hash错误。
list 不使用 hash 值进行索引 故其对所存储元素没有可哈希的要求 set / dict 使用 hash 值进行索引 也即其要求欲存储的元素有可哈希的要求。Python不支持dict的key为list或dict类型 因为list和dict类型是unhashable 不可哈希 的。
3、两种修改方式及对应的输出
经过排查 发现赋值的括号用错了 将{self_array}中的{}分别替换为[]与() 查看对应的结果。
1 首先是替换为[]
self_array [1,2,3]
self_return { code :200, message :[self_array]}
print(self_return)
对应输出为
{ code : 200, message : [[1, 2, 3]]}
json格式为
{
code : 200,
message : [
[1, 2, 3]
]
}
2 接着将{}替换为():
self_array [1,2,3]
self_return { code :200, message :(self_array)}
print(self_return)
对应的输出为
{ code : 200, message : [1, 2, 3]}
json格式为
{
code : 200,
message : [1, 2, 3]
}
由此 看出替换为[]与()的区别了:
替换为[] 那么数组外围又多了一层数组 替换为() 则没有多任何东西。



