2011-05-17 37 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__,這將允許您將項目存儲在一個集合中,導致重複更新集合中的單個實例。

這絕不是做什麼的只是另一種方式是最好的方法。