2011-12-10 74 views
0

如何在搜索列表時匹配確切的字符串/單詞。我試過了,但它不正確。下面我給樣本名單,我的代碼,測試結果只匹配Python中的確切單詞/字符串

list = ['Hi, friend', 'can you help me?'] 

我的代碼

dic=dict() 
for item in list: 
    for word in item.split(): 
     dic.setdefault(word, list()).append(item) 

print dic.get(s) 

測試結果:

s = "can" ~ expected output: 'can you help me?' ~ output I get: 'can you help me?' 
s = "you" ~ expected output: *nothing* ~ output I get: 'can you help me?' 
s = "Hi," ~ expected output: 'Hi, friend' ~ output I get: 'Hi, friend' 
s = "friend" ~ expected output: *nothing* ~ output I get: 'Hi, friend' 

我的目錄包含1500個字符串。任何人都可以幫助我?

+2

您需要更加具體地瞭解您的確切匹配含義。你的意思是它必須從一個特定的詞開始?這個詞必須在字符串中的某個地方? –

+0

你的問題不是很清楚。你問的是'如何在搜索列表時匹配確切的字符串/單詞'。但從你的例子中我知道你只是在搜索前綴匹配,即如果你正在搜索的單詞是短語中的第一個單詞。 – Abhijit

+0

嗨Abhijit,我想要前綴匹配。例如:字符串「你能幫我嗎?」 – Anoop

回答

1

看起來你需要地圖的句子和他們的出發字的,所以你不必映射這句話的所有單詞,但只有第一個。

from collections import defaultdict 

sentences = ['Hi, friend', 'can you help me?'] 

start_sentence_map = defaultdict(list) 
for sentence in sentences: 
    start = sentence.split()[0] 
    start_sentence_map[start].append(sentence) 

for s in ["can", "you", "Hi,", "friend"]: 
    print s,":",start_sentence_map.get(s) 

輸出:

can : ['can you help me?'] 
you : None 
Hi, : ['Hi, friend'] 
friend : None 

還要注意上述

  1. 從代碼幾件事情,因爲Python使用它list class
  2. 使用不使用名稱list作爲變量名默認字典,可以很容易地直接添加條目到詞典,而不是首先添加默認條目
  3. 更好的描述性名稱而不是mylist或dic
+0

謝謝你的信息 – Anoop

+0

@ user1077645可能你可以接受這個作爲答案嗎? –

1

在情況下,如果你只是想看看這句話給定的話,你可以嘗試startswith如果你不開始,不想搜索詞是在字邊界或split()[0]如果你想匹配的單詞邊界。作爲一個例子

>>> def foo(s): # @ word boundary 
    return [x for x in l if x.split()[0]==s] 

>>> def bar(s): # Prefix 
    return [x for x in l if x.startswith(s)] 

而且從覆蓋蟒蛇全局命名空間就像你做了什麼,當你命名你的列表,list避免。在我的例子中,我叫它l

相關問題