Python数据结构建议

时间:2011-05-17 09:38:35

标签: python

我正在构建一个小型搜索引擎来搜索pdf集合。从每个pdf我提取一组令牌并将其存储在数据库中。我不想在数据库中存储重复的令牌,而是希望在数据库中存储每个令牌的计数。 python是否有任何特殊的数据结构,不存储重复项,但存储每个令牌的计数?

4 个答案:

答案 0 :(得分:5)

Python> = 2.7具有Counter

答案 1 :(得分:3)

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

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

修改

也就是说,如果您使用的是Python 3,我会按照Space_C0wb0y的建议使用Counter类......

答案 2 :(得分:3)

集合包有defaultdict,可用作带计数器的键值存储:

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

注意:这不是数据库,它是一个纯粹的内存存储。你必须以某种方式保存这些数据!

答案 3 :(得分:0)

你总是可以为每个文件实现一个对象,为它提供许多方法,比如打开和显示等等。然后你可以为对象定义__hash____eq__,这样就可以了您将项目存储在一个集合中,导致重复项只是更新集合中的单个实例。

这只是做某事的另一种方式,绝不是最好的方法。