2017-02-13 50 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:謝謝。固定。 –