Python数据结构建议
我正在建立一个小型搜索引擎来搜索PDF的集合。我从每个pdf中提取一组令牌并将其存储在数据库中。我不希望在数据库中存储重复的令牌,而是希望在数据库中存储每个令牌的计数。python是否有任何特殊的数据结构,不存储重复项,而是存储每个令牌的计数?python>=2.7具有相同的属性。我建议使用一个简单的字典来存储计数,如Python数据结构建议,python,Python,我正在建立一个小型搜索引擎来搜索PDF的集合。我从每个pdf中提取一组令牌并将其存储在数据库中。我不希望在数据库中存储重复的令牌,而是希望在数据库中存储每个令牌的计数。python是否有任何特殊的数据结构,不存储重复项,而是存储每个令牌的计数?python>=2.7具有相同的属性。我建议使用一个简单的字典来存储计数,如 storage = {} # initialize # ... if !storage.has_key(token): storage[token] = 1 else:
storage = {} # initialize
# ...
if !storage.has_key(token):
storage[token] = 1
else:
storage[token] += 1
编辑
也就是说,如果您使用的是Python 3,我会按照Space_C0wb0y的建议使用
计数器
类…collections包中的计数器作为键值存储:
>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
... d[k] += 1
...
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
请注意:这不是一个数据库,它是一个纯内存存储。您必须以某种方式保存此数据 您可以始终为每个文件实现一个对象,为其提供许多方法,如打开和显示等。然后您可以为对象定义
\uuuuuuu散列\uuuuuu
和\uuuuuuuu eq\uuuu
,这将允许您将项目存储在一个集合中,从而使重复项只更新集合中的一个实例
这只是做某事的另一种方式,决不是最好的方法。如果不是存储。哈希键(令牌)我会使用
集合。defaultdict
并完全删除if
语句。@nikhil:你为什么接受这个解决方案?效率很低。我认为这样做的唯一原因是如果您有一个非常旧的Python版本。如果令牌不在存储中,您应该使用测试密钥。