2011-12-10 18 views
0

リストを検索する際の正確な文字列/単語の照合方法。私は試しましたが、それは正しくありません。は、Pythonの単語/文字列と完全に一致します

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個の文字列が含まれています。私は、サンプルリストを与えているの下に、私のコードとテストが

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) 

テスト結果を結果。誰も私を助けることができますか?場合

+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 

はまた、Pythonはlist class

  • 使用のためにそれを使用しているので、変数の名前として名前listを使用しないでください

    1. 上記のコードからいくつかの点に注意してください。既定のエントリを追加するのではなく、辞書に直接エントリを追加するのを簡単にするdefault dict
    2. mylistまたはdicの代わりに説明的な名前を使用する
  • +0

    情報ありがとうございました – Anoop

    +0

    @ user1077645これを回答として受け入れることができますか? –

    1

    あなただけの文章は、あなたがドン場合はstartswithを試すことができます与えられた言葉で始まるかどうかを確認したい場合、あなたはそれがワード境界でマッチさせたい場合は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と呼んでいます。あなたは文章やその出発単語のマップを必要とするよう

    関連する問題