2017-02-13 97 views
1

我有几个字典文件,我希望这个代码打开每个文件并将其添加到一个集合中,以便以后进行比较和匹配。基本上,我有所有可能字符的所有排列的不同列表,我需要知道排列是否在字典中。但是,当我试图让一组与所有字典行我得到这个错误:字典更新顺序元素错误

choices = ['s','m','o','k','e','j','a','c','k'] 
def parsed(choices): 
    mySet = {} 

    for item in choices: 
     filename = self.location + "/dicts/%s.txt" % (item) 
      mySet.update(open(filename).read().splitlines()) 

    return mySet 

我得到这个错误

error: dictionary update sequence element #0 has length 4; 2 is required 

此外,我想问如果有之间可能存在的比较方法两组数据(9个字符的排列和9个字典文件列表)在不到1分钟内运行。

据我所知,已经有关于这个错误的问题,但坦率地说,我是一个初学者,我不明白这些如何与我的代码,或如何解决它。

+0

堆栈溢出问题应该包含一个问题 - 这是为了让他们对未来的读者更有用。但是关于你的“进一步”,在我的2GHz 32位机器上,我可以在大约1.5秒内对“216553”字的[Sowpods Scrabble dictionary](http://www.3zsoftware.com/download)测试“SMOKEJACK”的所有排列。 FWIW,除了“SMOKEJACK”本身之外,我没有发现任何昵称。 –

+0

我明白了,现在我知道这是可能的。我已经重写了这段代码,并且会打开另一个问题来具体询问时间问题。非常感谢你。 – Notgivinit

+1

提示:使用'itertools.permutations'生成排列,并且不要将它们存储在列表或集合中:只需在生成它们时对照您的单词集进行测试。如果从包含所有单词的单个文件中读取单词,而不是为每个首字母单独分配文件,则可能会更快地构建单词集。 –

回答

3

如果你写:

mySet = {} 

mySet不是set,但字典(是的,这是混淆)。例如:

>>> type({}) 
<class 'dict'> 

为了构建一个空集,你应该使用:

mySet = set() 

一个set确实有一个功能update是作为输入元素的迭代被全部加在组。另一方面,字典需要迭代元组(或字典等)

+0

谢谢,我已经在这个几个小时里弄坏了我的头。 – Notgivinit

+0

@ PM2Ring:谢谢。固定。 –