1

我正在尝试运行一个有效执行以下操作的程序:

if [4, 5, False, False, False, False] in {}

而且,在这条线上,我得到了一个TypeError: unhashable type 'list'

我究竟做错了什么?

4

3 回答 3

5

代码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()])

于 2013-02-07T14:30:53.940 回答
1

Aset包含可散列的对象,这意味着它们是可排序的,并且它支持高效的搜索/插入方法。另一方面, alist是不可散列的。这就是您的代码出错的原因。我建议使用tuple而不是list.

if (4, 5, False, False, False, False) in {}:
  ...
于 2013-02-07T14:37:19.697 回答
0

你可以做类似的事情

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]):
    ....

取决于你想要什么

于 2013-02-07T14:33:46.303 回答