我想运行一个程序,它有效地执行以下操作:Python的类型错误:unhashable类型:“名单”
if [4, 5, False, False, False, False] in {}
而且,在这条线,我得到一个TypeError: unhashable type 'list'
我做错了什么?
我想运行一个程序,它有效地执行以下操作:Python的类型错误:unhashable类型:“名单”
if [4, 5, False, False, False, False] in {}
而且,在这条线,我得到一个TypeError: unhashable type 'list'
我做错了什么?
代码if foo in {}
检查是否有任何字典的键是等于foo
。
在你的榜样,foo
是一个列表。一个列表是一个不可干的类型,不能是字典的关键字。
如果你想检查是否列表中的任何项包含在一个字典键或在一组,你可以尝试:
if any([x in {} for x in (4, 5, False)])
。
如果你想检查是否有你的价值观是等于你的列表,你可以尝试:
if any([v == [4, 5, False, False, False, False] for v in your_dict.values()])
你可以做这样的事情
if all(x in {} for x in [4, 5, False, False, False, False]):
....
或
if any(x in {} for x in [4, 5, False, False, False, False]):
....
取决于你想要
什么甲set
持有可哈希对象,这意味着它们是可排序它使有效的搜索/插入方法。 另一方面,list
是不可散列的。这就是你的代码出错的原因。 我建议使用tuple
而不是list
。
if (4, 5, False, False, False, False) in {}:
...
这仍然更有效地写成“if False:”。如果OP告诉我们他/她真正想实现什么,那将会更有用。 – gerrit
感谢您注意到元组可以用作字典键而不是列表。 –
究竟是什么你想实现什么? – gerrit
我的数据结构看起来像[4,5,False,False,False,False],我想在无序列表中找到它们。 {}是这样一个例子(我的代码碰巧在当时是失败的)。我现在使用的是一个列表,而不是一本字典,而且效果更好。 –