2011-12-10 75 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

相关问题