2012-10-01 45 views
1

我想顯示在一個GUI列表框的一些信息。我在我的MVC的僅模型部分寫了一個測試方法,它輸出我想要的信息;但是,當我將該代碼轉移到完整的GUI時,它會引發錯誤。PYTHON - Unhashable名單

這裏有兩段代碼:

型號:(注意,此方法針對一類Products()書面)

def test(self): 
    for key in self._items_list: 
     print self.get_item(key) #this refers to the get_item function of the Products class: 

def get_item(self, key): 
    return self._items_list[key] # items_list is a dictionary 

所以,這個返回輸出我想放在我的列表框中。

這裏是我的代碼傳輸到我的GUI(這是一類我定義它從Control繼承):

def refreshData(self): 
    for keys in self._productslist: #this productslist is equivalent to items_list 
     disp = self._products.get_item(keys) #so i can call the method from the Product class 
     self.insert(END, dips) 

這引發了我下面的錯誤,當我嘗試打開並顯示文件:

...in get_item 
return self._items_list[key] 
TypeError: unhashable type: 'list' 

對不起,這是漫長的,可能非常混亂,但本質上我想知道爲什麼我得到的錯誤代碼的完整版本的方法,而不是在孤立的模型。

所有相關的代碼是相同的,據我所知。

任何想法將不勝感激!

+0

列表不能用作成套字典或值鍵,因爲它們不支持哈希 - 這是一個設計決策,Python已經執行(大概是因爲列表是可變的,這可能會導致危險的意外)。 – 2012-10-01 00:26:47

+0

(檢查什麼'key'計算 - 它可能不會如預期那樣 - 那麼*爲錯誤信息搜索*和兩件事情聯繫在一起:-) – 2012-10-01 00:28:03

+0

但爲什麼難道不存在處於孤立的模型,代碼中的錯誤?那是什麼讓我感到困惑! 另外,「list」是一個我稱爲self._items_list的字典,所以我調用存儲在[key]中的字典的值。是嗎? – chris

回答

1

你不能哈希表,只有一成不變的東西。雖然你可以定義爲list對象的一些擴展__hash__方法,這種邏輯背後的原因是,如果你要查找東西在一本字典,你期望中的條目的名字沒有改變。同樣,在Python中,鍵必須是不可變的。如另一個答案所述,請改用tuple