为了账号安全,请及时绑定邮箱和手机立即绑定

不可散列的类型:“列表”

不可散列的类型:“列表”

米琪卡哇伊 2022-01-18 16:05:25
基本上,我首先将字典放入列表中,然后在该列表中取出 6 个键。我还让用户输入一些值。现在我想把键和值放回另一个字典。我试过把它放在普通的字典格式中,例如:eliminate1 = {newcouple1:Couple01,newcouple2:Couple02,newcouple3:Couple03,newcouple4:Couple04}import operatorfrom operator import itemgettereliminate1 = {newcouple1:Couple01,newcouple2:Couple02,newcouple3:Couple03,newcouple4:Couple04}sorted_eliminate1 = sorted(eliminate1.items(), key=operator.itemgetter(1))gone = print("These Couples have been eliminated: ",dict(sorted_eliminate[0:2]))gone1 = dict(sorted_eliminate1[0:2])remaining01 = print("These are the remaining couples: ",dict(sorted(eliminate1.items(), key = itemgetter(1))[2:]))remaining1 = dict(sorted(eliminate1.items(), key = itemgetter(1))[2:])运行代码时出现错误:eliminate1 = {newcouple1:Couple01,newcouple2:Couple02,newcouple3:Couple03,newcouple4:Couple04}这是错误: TypeError: unhashable type: 'list'
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

Lists是不可散列的,因为它们是可变的。你能想象如果 adictionary key被分配给 a value,然后它key被改变了吗?这将是一场噩梦。

转换liststuples使它们可散列


查看完整回答
反对 回复 2022-01-18
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

为什么字典这么快?


因为,当您查找某些内容时,python 不会查找该对象。相反,它为每个对象分配一个整数(哈希值),然后搜索该整数。


但是,仅当您将其插入字典时才会发生这种情况。如果对象的值稍后发生变化,则哈希值不会,字典将无法找到该对象。


因此,您不能将可变对象放入字典中。对于列表,最简单的解决方案是将其转换为元组,例如,而不是


lst = [1, 2, 3]

x = { lst: "hello" }


lst  = [1, 2, 3]

x = { tuple(lst): "hello" }


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信