2015-12-13 73 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