2013-06-11 2 views
0

Как следует из названия, я пытаюсь найти значения в dict в строке. Это относится к моему посту здесь: Python dictionary - valueПоиск строки для значений, присутствующих в dict

Мой код-то вроде следующим образом:

import mechanize 
from bs4 import BeautifulSoup 

leaveOut = { 
      'a':'cat', 
      'b':'dog', 
      'c':'werewolf', 
      'd':'vampire', 
      'e':'nightmare' 
      } 

br = mechanize.Browser() 
r = br.open("http://<a_website_containing_a_list_of_movie_titles/") 
html = r.read() 
soup = BeautifulSoup(html) 
table = soup.find_all('table')[0] 

for row in table.find_all('tr'): 
    # Find all table data 
    for data in row.find_all('td'): 
     code_handling_the_assignment_of_movie_title_to_var_movieTitle 

     if any(movieTitle.find(leaveOut[c]) < 1 for c in 'abcde'): 
      do_this_set_of_instructions 
     else: 
      pass 

Я хочу, чтобы пропустить программу, содержащуюся под if блока (обозначенном выше как do_this_set_of_instructions), если строка хранится в movieTitle содержит любой из строк (или значений, если хотите) в файле leaveOut.

До сих пор мне не повезло с any(movieTitle.find(leaveOut[c]) < 1 for c in 'abcde'):, поскольку он всегда возвращает True, а do_this_set_of_instructions всегда выполняется независимо.

Любые идеи?

ответ

1

.find() возвращает -1, если подстрока не в строке, что вы работаете, так что ваш any() вызов возвратит True, если любое из слов не в названии.

Вы можете сделать что-то вроде этого, вместо:

if any(leaveOut[c] in movieTitle for c in 'abcde'): 
    # One of the words was in the title 

Или наоборот:

if all(leaveOut[c] not in movieTitle for c in 'abcde'): 
    # None of the words were in the title 

Кроме того, почему вы используете словарь, как это? Почему бы вам просто не сохранить слова в списке?

leave_out = ['dog', 'cat', 'wolf'] 

... 

if all(word not in movieTitle for word in leave_out): 
    # None of the words were in the title 
+0

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

+0

Кстати, это чувствительный к регистру? Например, если подстрока в переменной 'movieTitle' была« cat », но я указал« Cat »в моем списке, будет ли это еще идентифицировано или мне нужны как« Cat », так и« cat »в моем списке? –

+0

@I_lost_my_last_account: Используйте 'movieTitle.lower()' вместо 'movieTitle' в генераторе. – Blender

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