2016-11-13 6 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

辞書はキーとしての値の一部のみの種類を受け入れることができます。特に、ハッシュ可能である必要があります。つまり、ディクショナリでは変更できない( "immutable")ことを意味し、値を受け取り、何らかの形で整数を表す非負の整数を返すPythonに知られている関数が必要です。整数、浮動小数点数、文字列、タプルは不変でハッシュ可能ですが、標準のリスト、辞書、および集合はそうではありません。キーのハッシュ値は、標準のPython辞書にキーと値のペアを格納するために使用されます。このメソッドは、キーを検索する速度のために選択されましたが、速度は可能なキー値を制限するコストになります。他の方法も選択できましたが、これはPythonで辞書の意図した目的にはうまくいきます。

artistsの現在の値はハッシュ可能ではないが、for b in db[artists]:行を実行しようとしました。これはエラーです。私はartistsの値が何であったかは言えません。値が関数のパラメータであり、呼び出しコードを表示していないからです。

表示されたエラーを引き起こした機能works_by_artists()には、artistsのどの値が指定されているかを確認してください。その値を作成したものは、コード内の実際のエラーです。

関連する問題