我想運行一個程序,它有效地執行以下操作: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],我想在無序列表中找到它們。 {}是這樣一個例子(我的代碼碰巧在當時是失敗的)。我現在使用的是一個列表,而不是一本字典,而且效果更好。 –