2017-05-28 40 views
0

我想構建一個字典,但在添加新元素之前,我必須檢查該元素是否已經存在於字典中。它的構造方式,我的字典s有鍵是字符串(不是列表)。這就是爲什麼我不知道爲什麼我會收到此錯誤消息:TypeError: unhashable type: 'list'TypeError:在我的字典中不可用的類型:'list'

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'是一個列表。那麼你使用'w不是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:可能是你所需要的。

相關問題