2013-06-11 77 views
0

正如標題所示,我試圖在字符串內的字典中查找值。這涉及到我的帖子在這裏:Python dictionary - value在字典中搜索字符串的值

我的代碼是一樣的東西如下:

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

謝謝,列表選項適用於我。我試圖做一個字典由於我有一個錯誤,所以我認爲字典將是一個解決方法... –

+0

順便說一句,這是否區分大小寫?例如,如果變量「movieTitle」中的子字符串是「cat」,但我在列表中指定了「Cat」,這仍然可以被識別,還是我需要我的列表中的「Cat」和「cat」? –

+0

@I_lost_my_last_account:在生成器中使用'movieTitle.lower()'代替'movieTitle'。 – Blender