我在尝试从字典中删除元素或对时遇到了困难。当您键入子名称时,它应该同时删除父项和子项,但它始终会产生以下错误:
Traceback (most recent call last):
File "C:\Users\jam7733\Desktop\whos ur daddy.py", line 23, in <module>
daddy()
File "C:\Users\jam7733\Desktop\whos ur daddy.py", line 20, in daddy
if del_son in fathers:
TypeError: unhashable type: 'list'
下面是我的代码:
^{pr2}$
正如@kindall和@padrainchunningham在评论中所说,
del_son
是一个列表:因为在这里你用空格隔开了它的名字。考虑到你的代码,我相信这是个错误,或者你在写这行代码时有些东西你不明白。在
在python中,不能使用
^{pr2}$list
作为dict
的键,因为dict
需要它的所有键都是不可变的,以确保给定的键是唯一的。在python中,list
s和dict
s是可变的。这意味着当你这样做时:i
只是对以值1
实例化的int
对象的引用。当您将2
分配给i
时,值为1
的前一个实例将被遗忘,并将由垃圾回收器收集。但当你这样做的时候:然后从}。现在,假设您想用dict中的
l
引用了一个list
对象,修改后包含两个值:1
和{list
为一个值建立索引,然后:天真地说,这没什么不起作用的:
但如果你这样做了呢:
那么
dict
怎么还能工作,因为dict
会变成:希望您得到了
tuple
类型,它是不可变和可散列的:所以你可能不想
.split()
它。您可能需要strip()
它(这将删除所有前导和尾随的空白字符)。在所以给你:
高温
对于
del_son
输入,您将分配raw_input("...").split(" ")
的结果。返回一个列表。所以del_son
变成了一个列表,不能用于字典键。在在本例中,您需要的只是分割的第一个结果,因此
raw_input("...").split(" ")[0]
:返回了该列表中第一个项的索引。那么
del_son
只是第一个元素和一个字符串。在如果
^{pr2}$raw_input...split...[0]
看起来太长了,您可以将该行保留为现在的状态,并将下一位更改为:字典不能有list类型的键,因为这些键必须是不可变的。但是,您可以使用另一个不可变的类型(比如元组),但这只是更大问题的外围问题。问题是你在没有必要的时候把儿子的名字分开。在
它总是返回一个列表。键入时:
^{pr2}$它用一个列表的键来索引父亲的dict,这是不允许的。只需删除原始输入后的
.split(" ")
,它就可以工作了。在相关问题 更多 >
编程相关推荐