2017-05-28 20 views
0

辞書を作成しようとしていますが、新しい要素を追加する前に、この要素が辞書にないことを確認する必要があります。それが構築される方法、私の辞書sは文字列(リストではない)であるキーを持っています。だから私はなぜこのエラーメッセージが表示されるのかわからないのです:TypeError: unhashable type: 'list'TypeError:unhashable type: 'list' in my dictionary

men=['h1','h2','h3'] 
women=['f1','f2','f3'] 
pref={'h1':['f2','f1','f3'],'h2':['f2','f1','f3'],'h3':['f3','f2','f1']} 
rank={'f1':{'h3','h1','h2'},'f2':{'h3','h2','h1'},'f3':{'h1','h2','h3'}} 
for n in pref: 
    pref[n].reverse() 
freemen=men 
l=len(men) 
s={} 
while freemen: 
    m=freemen.pop() 
    if len(pref[m])==0: 
     continue 
    w=pref[m] 
    if w not in s: 
     s[w]=m 
    else: 
    mprime=s[w] 
    if rank[w][m]<rank[w][mprime]: 
     s[w]=m 
     freemen.append(mprime) 
    else: 
     freemen.append(m) 
print(s) 
+0

とにかく、あなたの問題はこれです:あなたは 'w = pref [m]'と言うので、 'w'はリストです。次に 's not in s'を使います。リストのキーが 's'にあるかどうかをチェックしています。リストには辞書のキーを使うことはできませんが、これはアルゴリズムにとって欲しいものではありません。 –

+0

意味的には、あなたが望むのは、(安定した結婚問題の元の言葉を使うために)与えられた男性が好む女性のリスト全体ではなく、単一の「女性」です。 –

答えて

0

犯人はこの行ですif w not in s:です。 wは、dictionary s has keys that are strings (not lists)というあなたの前提を壊すリストです。

私はあなたがここでやろうとしているが、何が必要かもしれない

for women in w: 
    if women not in s: 

if w not in s:を交換しているかの確認していません。

関連する問題