1

我正在尝试在 GUI 列表框中显示一些信息。我在 MVC 的仅模型部分中编写了一个测试方法,它输出我想要的信息;但是,当我将该代码传输到完整的 GUI 时,它会引发错误。

下面是两段代码:

模型:(注意这个方法是为一个类写的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 的方式(这是在我定义的继承自 Listbox 的类中):

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'

抱歉,这很长而且可能非常令人困惑,但基本上我想知道为什么我在完整版本的代码中而不是在隔离模型中得到该方法的错误。

据我所知,所有相关代码都是相同的。

任何想法将不胜感激!

4

2 回答 2

1

你不能散列列表,只有不可变的东西。尽管您可以为对象__hash__的某些扩展定义一个方法,但list此逻辑背后的原因是,如果您要在字典中查找某些内容,您会希望条目的名称不会改变。同样,在 python 中,键必须是不可变的。正如另一个答案所说,请改用 a tuple

于 2012-10-01T01:02:01.507 回答
0

改用元组: http ://wiki.python.org/moin/DictionaryKeys

于 2012-10-01T00:26:42.543 回答