2015-12-13 74 views
0

我有一個文本文件,這是一個很長的單詞列表,沒有空格,例如「神經心理神經科學神經科學神經病學神經科學史」等 我想建立一個程序,將採取一個輸入的單詞,並檢查該單詞的任何字典的.txt文件,然後將它們添加到字典中。從Python中的.txt文件中將字典添加到字典中?

我到目前爲止所提供的代碼打印出1個包含在words.txt中的1個字典的字典;

anagram_dict = {} 

def anagram(word): 

    b = open('words.txt', 'r').readlines() 
    text = ''.join(line.strip() for line in b) 

    #print(len(text)) 

    for i in range(len(text)-len(word)): 
     prop = text[i:i+len(word)] 
     if all(char in word for char in prop): #and all(prop.count(char) == prop.count(word) for char in prop): 
      anagram_dict[''.join(sorted(word))] = [prop] 

    print(anagram_dict) 

anagram("demand") 

的問題是,它打印的排列不是字謎(我輸入的「需求」期待「勁爆」來了,但它打印「amamad」,這是在文件中但不是一個字謎)如何如果排列是一個真正的anagram(剛剛重新排列的相同字母),我可以讓它只打印字典嗎?我想這個問題可能與「如果所有(在道具中字符的字符):#和所有(道具中的字符的prop.count(char)== prop.count(字)):」

特別是當它運行時註釋掉的部分只是打印一個空字符串。

道歉這麼長時間,我只是想確保我解釋我自己。謝謝你的幫助。

回答

0

all(char in word for char in prop)只是檢查word的所有字母是否在prop。 需求的所有信件都是"present""madden",所以它會顯示在結果中。

all(prop.count(char) == prop.count(word) for char in prop)存在問題(可能是拼寫錯誤)。

應該all(prop.count(char) == word.count(char) for char in prop)


還有一個更好的選擇,檢查的propword排序的版本相同。

sword = ''.join(sorted(word)) 
anagram_dict[sword] = [] 
for i in range(len(text)-len(word)): 
    prop = text[i:i+len(word)] 
    if sword == ''.join(sorted(prop)): 
     anagram_dict[sword].append(prop) 
+0

太感謝你了,現在打印所有排列在一個字典,但現在我試圖讓這個只補充說,到所述字典包含words.txt內排列。我認爲它可能只是「如果檢查文本/ B」,但它只是打印空字典的字典。 –

+0

在單獨的列表中追加字母。然後在循環結束後,檢查該列表是否爲空。如果不是,您可以將該列表添加到您的字典中。 – jatinderjit