2011-05-17 38 views
2

我建立一个小的搜索引擎来搜索PDF文件的集合。从每个pdf中提取一组令牌并将其存储在数据库中。我不想在数据库中存储重复的令牌,而是想要将每个令牌的数量存储在数据库中。 python是否有任何特殊的数据结构,不存储重复但存储每个令牌的计数?Python的数据结构网络化建议

回答

3

我建议使用一个简单的字典存储计数像

storage = {} # initialize 
# ... 
if !storage.has_key(token): 
    storage[token] = 1 
else: 
    storage[token] += 1 

编辑

这就是说,如果你使用Python 3我会跟随Space_C0wb0y的建议使用Counter类...

+0

如果不是storage.hash_key(令牌) – nikhil 2011-05-17 10:05:57

+1

我会使用一个'collections.defaultdict'并且完全消除了'if'声明。 – 2011-05-17 10:10:42

+0

@nikhil:你为什么接受这个解决方案?这是相当低效的。我认为这样做的唯一理由是如果你有一个非常古老的Python版本。 – 2011-05-20 06:35:01

3

收藏包中有defaultdict,它可以用作计数器的键值存储:

>>> s = 'mississippi' 
>>> d = defaultdict(int) 
>>> for k in s: 
...  d[k] += 1 
... 
>>> d.items() 
[('i', 4), ('p', 2), ('s', 4), ('m', 1)] 

正是这样的通知:这不是一个DATABSE,它在内存存储纯。你必须以某种方式保存这些数据!

0

您可以随时为每个文件实现一个对象,并为其提供多种方法,如打开和显示等。然后,您可以为对象定义__hash____eq__,这将允许您将项目存储在一个集合中,导致重复更新集合中的单个实例。

这绝不是做什么的只是另一种方式是最好的方法。