在python中仅匹配精确的单词/字符串

在python中仅匹配精确的单词/字符串,python,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

如何在搜索列表时精确匹配字符串/单词。我试过了,但不正确。下面我给出了示例列表、代码和测试结果

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个字符串。任何人都可以帮助我???

如果你只是想看看句子是否以给定的单词开头,你可以尝试
开始使用
,如果你不想;t不希望搜索的单词位于单词边界处,或者如果希望它在单词边界处匹配,
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
时那样覆盖python全局名称空间。在我的示例中,我将其称为
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
还要注意上面代码中的一些内容

  • 不要使用name
    list
    作为变量名,因为python将其用于
    list类
  • 使用DefaultDict,可以轻松地直接将条目添加到字典中,而不是首先添加默认条目
  • 更好的描述性名称,而不是mylist或dic

  • 您需要更具体地说明精确匹配的含义。你是说它必须以一个特定的词开头吗?这个词必须在字符串中的某个地方?你的问题不是很清楚。您要问的是
    如何在搜索列表时精确匹配字符串/单词。
    但从您的示例中,我了解到您只是在搜索前缀匹配,即,如果您要搜索的单词是短语中的第一个单词。您好,Abhijit,我想要前缀匹配。示例:字符串“Canyou help me???”如果我们搜索“can”我们需要获取“Canyou help me???”否则不需要匹配任何内容。阿比吉特,你能拿到吗?看看我的例子或者阿努拉格的。不管你穿哪一套,你都可以穿。。