【问题标题】:match only exact word/string in python仅匹配python中的确切单词/字符串
【发布时间】:2011-12-10 16:03:14
【问题描述】:

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

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 个字符串。有人可以帮帮我吗??

【问题讨论】:

  • 您需要更具体地了解精确匹配的含义。你的意思是它必须以一个特定的词开头?这个词必须在字符串中的某个地方?
  • 你的问题不是很清楚。您要问的是How to match exact string/word while searching a list.,但从您的示例中,我了解到您只是在搜索前缀匹配,即您正在搜索的单词是否是短语中的第一个单词。
  • 嗨 Abhijit,我想要前缀匹配。示例:字符串“你能帮帮我吗?”
  • 如果我们搜索“Can”,我们需要得到“can you help me??”否则不需要匹配任何东西。你能得到它阿比吉特吗??
  • 看看我的例子或 Anurag 的例子。哪一种适合你,你可以随它去..

标签: python


【解决方案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. 不要使用名称list 作为变量名,因为python 将它用于list class
  2. 使用默认字典,这样可以很容易地直接将条目添加到字典中,而不是先添加默认条目
  3. 更好的描述性名称,而不是 mylist 或 dic

【讨论】:

    【解决方案2】:

    如果您只想查看句子是否以给定单词开头,您可以尝试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 时那样覆盖python 全局名称空间。在我的示例中,我将其称为 l

    【讨论】:

      猜你喜欢
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      相关资源
      最近更新 更多