我有一个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
我的想法是,我可以通过使用
.find()
方法中,如果值是测试字符串
movieTitle
任何字典(预定义的)的值的发现将返回一个大于(或至少)等于1的索引整数值。因此,如果条件的结果是< 1(通常为-1,当不存在时),我可以继续执行程序的其余部分,否则不执行程序的其余部分。但是,当我使用Aptana调试功能时,我可以看到我的这个
if
模块上的断点从不参与,就好像Aptana正在跳过它一样。为什么是这样?
编辑:
拥有包括为清楚起见更多的代码。审查了我使用@kqr建议的代码的建议。但是,尽管在leaveOut字典中包含字符串值,但我的实际程序仍显示movieTitle。为什么?
你真的想使用按位还是('|')而不是逻辑或('或')吗? – mgilson
此外,也许'任何(movieTitle.find(leaveOut [c])<1 for'in'abcdefghijklm')'可能会更简洁。 – mgilson
无论dict的值是否在'movieTitle'中找到,都会一致地返回True,因此为什么'if'块不适合我。 –