Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数据结构建议_Python - Fatal编程技术网

Python数据结构建议

Python数据结构建议,python,Python,我正在建立一个小型搜索引擎来搜索PDF的集合。我从每个pdf中提取一组令牌并将其存储在数据库中。我不希望在数据库中存储重复的令牌,而是希望在数据库中存储每个令牌的计数。python是否有任何特殊的数据结构,不存储重复项,而是存储每个令牌的计数?python>=2.7具有相同的属性。我建议使用一个简单的字典来存储计数,如 storage = {} # initialize # ... if !storage.has_key(token): storage[token] = 1 else:

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

python>=2.7具有相同的属性。

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

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版本。如果令牌不在存储中,您应该使用
测试密钥。