我正在构建一个小型搜索引擎来搜索pdf集合。从每个pdf我提取一组令牌并将其存储在数据库中。我不想在数据库中存储重复的令牌,而是希望在数据库中存储每个令牌的计数。 python是否有任何特殊的数据结构,不存储重复项,但存储每个令牌的计数?
答案 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__
,这样就可以了您将项目存储在一个集合中,导致重复项只是更新集合中的单个实例。
这只是做某事的另一种方式,绝不是最好的方法。