2016-11-13 59 views
-1

因此,我必须创建一个简单的程序,该程序接受带有一群艺术家和他们的艺术作品以及艺术细节的数据库。有一个给定的艺术家,我必须搜索数据库,以找到所有他们必须对同一个艺术家并返回他们。我不允许使用其他内置函数,也不允许导入任何内容。有人能告诉我为什么它会产生错误及其含义?如何接受数据库并在python中输出列表

def works_by_artists(db,artists): 
    newlist = {} 
    for a in db.keys(): 
    for b in db[artists]: 
     if a == b: 
     newlist.append(a); 
    return newlist 

这将打印出一个错误:

for b in db[artists]: 
TypeError: unhashable type: 'list' 
+0

这里有很多未定义的变量:b和x应该是一个列表... –

回答

0

字典只能接受某些类型的值作为键。特别是,它们必须是可散列,这意味着它们在字典中不能更改(“不可变”),并且必须有一个Python已知的函数,该函数接受该值并返回一个非负整数,以某种方式表示该整数。整数,浮点数,字符串和元组是不可变的且可哈希的,而标准列表,字典和集合则不是。密钥的散列值用于存储标准Python字典中的键值对。这种方法的选择是为了快速查找密钥,但速度是以限制可能的关键值为代价的。还可以选择其他方式,但这对于Python中字典的预期用途非常有效。

您试图执行for b in db[artists]:行,而当前值artists不可排除。这是一个错误。我不能说artists的价值是什么,因为这个值是该函数的一个参数,并且你没有显示调用代码。

因此检查artists的哪个值被赋予导致显示错误的功能works_by_artists()。无论创建该值是否是代码中的实际错误。