2017-02-13 16 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

Вопросы переполнения стека должны содержать один вопрос - это сделать их более полезными для будущих читателей. Но в отношении вашего «более того» на моей 32-битной машине 2 ГГц я могу протестировать все перестановки «SMOKEJACK» против [sowpods Scrabble dictionary] (http://www.3zsoftware.com/download) из 216553 слов за 1,5 секунды. FWIW, я не нашел анаграмм, кроме самого «SMOKEJACK». –

+0

Я вижу, теперь я знаю, что это возможно. Я переписал этот код и открою еще один вопрос, задающий вопрос о времени. Большое спасибо. – Notgivinit

+1

Подсказка: используйте 'itertools.permutations' для генерации перестановок и _don't_ храните их в списке или наборе: просто проверяйте их на свой набор слов по мере их создания. И, вероятно, было бы быстрее построить набор слов, если вы прочтете их из одного файла, содержащего все слова, вместо того, чтобы иметь отдельные файлы для каждой начальной буквы. –

ответ

3

Если вы пишете:

mySet = {} 

mySet является не set, но словарь (да что сбивает с толку). Например:

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

Чтобы построить пустой набор, вы должны использовать:

mySet = set() 

set действительно имеет функцию update, которая принимает в качестве входных данных итератора элементов, которые все добавляемые к задавать. Словарь с другой стороны требует итерации кортежей (или словаря и т. Д.)

+0

Спасибо, я часами прокручиваю голову. – Notgivinit

+0

@ PM2Ring: спасибо. Исправлена. –