Если ваш английский словарь действительно является набором (мы надеемся, что слова в нижнем регистре),
set(vocab) - english_dictionary
дает вам набор слов, которые есть в наборе vocab
, но не в наборе english_dictionary
. (Жаль, что вы превратили vocab
в список с помощью этого sorted
, поскольку вам нужно превратить его обратно в набор для выполнения таких операций, как эта разность наборов!).
Если ваш словарь английского языка имеет какой-то другой формат, на самом деле не набор или не состоит только из слов в нижнем регистре, вам нужно будет сообщить нам, что это за формат, чтобы мы могли помочь! -)
Редактировать : учитывая, что редактирование ОП показывает, что и words
(что ранее называлось vocab
), и englishwords
(то, что я ранее называл english_dictionary
), фактически являются списками строчных слов тогда
newwords = set(words) - set(englishwords)
или
newwords = set(words).difference(englishwords)
- это два способа выразить «набор слов, которые не являются английскими словами». Первый вариант немного более лаконичен, последний, возможно, немного более читабелен (поскольку он явно использует слово «разница» вместо знака минус) и, возможно, немного более эффективен (поскольку он явно не преобразует список englishwords
в набор - хотя, если скорость имеет решающее значение, это должно быть проверено измерением, так как «внутренне» difference
все еще необходимо выполнить какую-то операцию, похожую на «преобразование в набор»).
Если вы стремитесь получить список в качестве результата вместо набора, sorted(newwords)
выдаст вам отсортированный по алфавиту список (list(newwords)
даст вам список немного быстрее, но в совершенно произвольном порядке, и Я подозреваю, что вы бы предпочли немного подождать и получить взамен прекрасный алфавитный результат; -).