2011-01-06 36 views
2

我有一個類有2個成員變量:Python的搜索:如何做到這一點有效

class A: 
    fullname = "" 
    email = "" 

還有的存儲在內存中,現在我需要尋找對全名或電子郵件,搜索需要的列表以支持模糊搜索(組裝SQL'like'子句),例如)搜索「abc」,因爲它應該匹配「dabcd」(如果它可以首先顯示精確匹配,它會更好)。

我想我應該建立'全名'和'電子郵件'的索引?

請建議,謝謝!

編輯:如果我只需要完全匹配,兩個字典與'全名'和'電子郵件'是關鍵是最好的選擇?我看到一些文章說取回是O(1)。

第二次編輯:我定義的'最好'是搜索速度(最佳速度)。正如我在Python中所看到的,引用只會作爲指針存儲到字典中,所以空間分配不應該成爲問題。我有成千上萬的紀錄。

+0

您預計會有多少條目? – Tom 2011-01-06 02:23:37

回答

2

如果我只需要完全匹配,那麼以'全名'和'電子郵件'爲關鍵字的兩個字典是最好的選擇嗎?

如果用「最佳」表示「最佳速度」,那麼是的。

我看到一些文章說抓取是O(1)。

這是正確的。

兩本字典會很快。


如果你想要「喜歡」從句行爲,沒關係。大多數結構同樣緩慢。字典會起作用,而且會相當快。但是,列表的速度大致相同。

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

已更新,請檢查。如果我需要模糊搜索,你有什麼建議嗎? – 2011-01-06 02:27:11

+1

@Bin Chen:請說出你認爲你的意思是「模糊」。我可以說任何事情。你的例子基本上是「包含」的關鍵字串。這是你的意思是「模糊」嗎?包含? – 2011-01-06 02:31:35

+0

是的,這就是我的意思模糊。我認爲這是SQL語言中的'like'關鍵字。 – 2011-01-06 02:33:11

3

看看sqlite3模塊。您可以將數據放入內存數據庫中,將其編入索引,然後使用標準SQL查詢它。