我正在尝试运行一个有效执行以下操作的程序:
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()])
Aset
包含可散列的对象,这意味着它们是可排序的,并且它支持高效的搜索/插入方法。另一方面, alist
是不可散列的。这就是您的代码出错的原因。我建议使用tuple
而不是list
.
if (4, 5, False, False, False, False) in {}:
...
你可以做类似的事情
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]):
....
取决于你想要什么