2011-01-06 35 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查询它。