2014-10-28 6 views
0

내 프로그램 (anagram solver)을 실행할 때 오류가 발생합니다. Unhashable type : list. 나는 무엇을해야합니까? 나는 같은 오류를주는 것처럼 집합 ([단어])을 할 수 없습니다.사전 파이썬 작업

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

+0

그 수업 이후로 꾸짖음을 사용하지 못했습니다. 우리는 학습 된 frozenset을 배우지 않았습니다. –

답변

0

가 보이는 :

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

그래서 setWord에 대한 필요가 없습니다; 그냥 :

sortDict[sortWord].add(word) 
0

대신 목록의 tuple를 사용 :

setWord = frozenset([word]) 
:

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

또 다른 가능성은 당신이 세트 안에 세트를 원하는 경우 frozenset을 사용하는 것입니다 여기

코드입니다

The documentation 설명 :

의 모든파이썬의 불변의 내장 객체 해쉬 [...]

그리고 tuplefrozenset 문서화에서 볼 수 있듯이

- 그들은 불변의 유형입니다.

+0

'setWord'는 문자열입니다.이 줄에는 문제가 있습니다 :'sortDict [sortWord] .add (setWord)' –

+0

죄송합니다, 내 ... –

+0

내가 튜플 1을 수행하고 여전히 오류가 발생했습니다 –

0

정규화 된 양식 (정렬 된 단어)에서 실제 토큰 목록으로 매핑하려고합니다. 당신이 그들의 원본의 세트로 정렬 된 단어를 매핑 할 같은