2016-11-13 15 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()。無論創建該值是否是代碼中的實際錯誤。

相關問題