2014-10-28 91 views
0

當我運行我的程序(anagram求解器)時,出現錯誤Unhashable type:list。我該怎麼設置?我無法設置([字]),因爲這也給出了同樣的錯誤。使用字典python

word.txt包含一串換行符。

這裏是代碼:

def main(): 
    wordList = readMatrix() 
    print(lengthWord()) 

def readMatrix(): 
    wordList = [] 
    strFile = open("words.txt", "r") 
    lines = strFile.readlines() 
    for line in lines: 
     word = sorted(line.rstrip().lower()) 
     wordList.append(word) 
    return tuple(wordList) 

def lengthWord(): 
    lenWord = 7 
    sortDict = {} 
    wordList = readMatrix() 
    for word in wordList: 
     if len(word) == lenWord: 
      sortWord = ''.join(sorted(word)) 
      setWord = set([word]) 
      if sortWord not in sortDict: 
       sortDict[sortWord] = set() 
      sortDict[sortWord].add(setWord) 
    return sortDict 


main() 
+0

使用'frozenset([word])'。 – MAK 2014-10-28 21:18:02

+0

不能使用frozenset,因爲它的類,我們沒有學過frozenset – 2014-10-28 21:52:14

回答

0

看起來要排序的話映射到他們的套原稿:

sortDict = { 
    'dgo': set('dog', 'god'), 
    ... 
} 

所以不需要setWord;只需要:

sortDict[sortWord].add(word) 
0

使用tuple,而不是一個列表:

setWord = word, # or setWord = tuple(word) 

另一種可能性是使用frozenset,如果你想一集一集裏面:

setWord = frozenset([word]) 

The documentation說明:

所有的Python的不可變的內置對象是可哈希[...]

而且可以看出在tuplefrozenset單證 - 它們是不可變的類型。

+0

'setWord'是一個字符串...他在這一行有問題:'sortDict [sortWord] .add(setWord)' – 2014-10-28 21:21:25

+0

對不起,我的壞... – 2014-10-28 21:23:54

+0

我做了元組一,仍然得到錯誤 – 2014-10-28 21:51:13

0

你想從一個規範化的形式(排序的詞)映射到一個實際的令牌列表。