2011-01-06 6 views
2

I持っている一つのクラス持つ2人の変数メンバー:Pythonの検索:それを行う方法を効率的に

class A: 
    fullname = "" 
    email = "" 

メモリに保存されている、今私はフルネームやメール、検索ニーズに対して検索する必要があるのリストがありますファジー検索をサポートするには(たとえば、SQLのlike節を組み立てる)、例えば "abc"を検索します。 "dabcd"に一致する必要があります。

「フルネーム」と「メール」にインデックスを作成する必要があると思いますか?

お願いします、ありがとう!

EDIT:完全一致のみが必要な場合は、 'fullname'と 'email'をキーとする2つの辞書が最適ですか?フェッチがO(1)であるとの記事があります。

第2編集:私が定義した「最良」とは、検索速度(最高速度)です。私が考えるように、Pythonではリファレンスはポインターとしてのみ辞書に格納されるため、スペースの割り当ては問題ではありません。私には何千もの記録があります。

+0

いくつのエントリがありますか? – Tom

答えて

2

「完全一致」と「電子メール」をキーとする2つの辞書が最適ですか?

「ベスト」とは「最高のスピード」を意味する場合は「はい」です。

フェッチがO(1)であるとの記事があります。

これは正しいです。

2つの辞書が高速になります。


「好き」節の動作をしたい場合は、問題ありません。ほとんどの構造は同じように遅いです。辞書が動作し、合理的に速くなります。リストは、しかし、ほぼ同じ速度になります。

def find_using_like(some_partial_key, dictionary): 
    for k in dictionary: 
     if some_partial_key in key: 
      return dictionary[k] 
+0

が更新されましたので、ご確認ください。あいまい検索が必要な場合は、何か提案がありますか? –

+1

@ビン・チェン:あなたが「ファジィ」という言いたいことを述べてください。私は何かを意味することができます。あなたの例は本質的にキー文字列の "包含"です。それはあなたが "あいまい"という意味ですか?含まれていますか? –

+0

はい、それは私があいまいであることを意味します。私はそれがSQL言語のキーワードのようなものだと思う。 –

3

sqlite3モジュールを見てください。データをインメモリ・データベースに入れ、索引付けし、標準SQLで照会することができます。

関連する問題