[英]match only exact word/string in 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个字符串。 有谁可以帮帮我?
如果您只是想查看句子是否以给定的单词开头,您可以尝试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)]
还要避免覆盖python全局名称空间,就像将列表命名为list
时所做的那样。 我在我的例子中称它为l
。
看起来你需要一个句子地图和他们的起始单词,所以你不需要映射那个句子中的所有单词而只需要映射第一个单词。
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
还要注意上面代码中的一些内容
list
作为变量名称,因为python将其用于list class
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.