2015-06-30 3 views
2

У меня есть список, содержащий строки, содержащие описания из тела текста, который выглядит следующим образом:Фильтрация списка строк со списком ключевых слов с помощью петли

stringlist = ['I have a dog and cat and the dog is seven years old', 'that dog is old'] 

и мне нужно фильтровать эти строки в виде списка ключевые слова, которые находятся в другом списке:

keywords = ['dog', 'cat', 'old'] 

и присоединяя каждое ключевое слово в строку в зависимости от того, сколько раз он находится в строке.

filteredlist = [['dog', 'dog', 'cat', 'old'], ['dog', 'old']] 

Я расщепление строки в stringslist и используя список понимание, чтобы проверить, если ключевое слово находится в списке, но не выводит правильно, когда я пробегаем по ключевым словам.

Код работает, когда я использую одну конкретную строку для поиска следующим образом:

filteritem = 'dog' 
filteredlist = [] 
for string in stringlist: 
    string = string.split() 
    res = [x for x in string if filteritem in x] 
    filteredlist.append(res) 

Полученный filteredlist выглядит следующим образом:

filteredlist = [['dog', 'dog'], ['dog']] 

который присоединяет ключевое слово для каждого экземпляра, что ключевое слово находится в последовательности строк.

Когда я пытаюсь перебирать список ключевых слов, как показано ниже, цикл for теряет структуру.

filteredlist = [] 
for string in stringlist: 
    string = string.split() 
    for keyword in keywords: 
     res = [x for x in string if keyword in x] 
     filteredlist.append(res) 

Вот результат:

filteredlist = [['dog', 'dog'], ['cat'], ['old'], [], ['dog'], [], ['old'], []] 

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

+0

Я не совсем ясно, что ваш вопрос. Является ли 'filter_list' выше того, что вы хотите, чтобы результат выглядел? –

+0

отфильтрованный список вверху - это выход, который я хочу, чтобы он выглядел. – genghistong

ответ

3

Вы можете написать это в виде вложенного списка осмыслению

>>> [[word for word in string.split() if word in keywords] for string in stringlist] 
[['dog', 'cat', 'dog', 'old'], ['dog', 'old']] 
+1

Убей меня :) Возможно, вы захотите использовать 'set'. –

+0

спасибо! знал, что там где-то должно быть вложенное понимание списка. – genghistong

Смежные вопросы