У меня есть if
блок
заявление, что проверка, если строка, я присваивается переменной movieTitle
содержит значение пары ключ-значение в предопределенной словаре.словарь Python - значение
код у меня есть:
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
Мои мысли, что я могу проверить строку
movieTitle
для любого из значений словаря (предопределенной), используя
.find()
метод, если значение является found вернет целочисленное значение индекса больше (или, по крайней мере), равное 1. Поэтому, если результатом условия является < 1 (обычно -1, если отсутствует), я могу продолжить работу с остальной частью программы, иначе не выполнить остальной части программы.
Однако, когда я использую функцию отладки Aptana я вижу, что моя точка останова на этом
if
блоке никогда не занимались, как будто Aptana пропускает прямо над ним. Почему это?
Edit:
Включили больше кода для ясности. Просмотрев предложения, я использовал код, предложенный @kqr. Однако моя фактическая программа по-прежнему отображает movieTitle, несмотря на наличие строковых значений, содержащихся в dictOut dict. Зачем?
Вы действительно хотите использовать побитовое (или '' ') вместо логического или (' или ')? – mgilson
Кроме того, возможно, что 'any (movieTitle.find (leaveOut [c]) <1 для c в 'abcdefghijklm')', вероятно, будет более кратким. – mgilson
Это возвращает True последовательно, независимо от того, найдено ли значение dict в 'movieTitle' или нет, поэтому почему блок' if' не работает для меня. –