我有幾個python腳本,我在字典中存儲5-10萬個字符串鍵值對,我查詢這個詞典大約5-10百萬次。我注意到python字典不是很好。是否還有其他最適合字符串鍵的實現?Python:最好的詞典實現
編輯:
我有人名的兩個大名單,我想它們匹配,所以我把其中的一個作爲參考列表,並嘗試在第二列表中的每名申請不同的啓發式弄清楚如果存在於第一個列表中。所以,我必須在第二個列表中爲每個名字查詢第一個列表2-3次。希望,這是有道理的。
我有幾個python腳本,我在字典中存儲5-10萬個字符串鍵值對,我查詢這個詞典大約5-10百萬次。我注意到python字典不是很好。是否還有其他最適合字符串鍵的實現?Python:最好的詞典實現
編輯:
我有人名的兩個大名單,我想它們匹配,所以我把其中的一個作爲參考列表,並嘗試在第二列表中的每名申請不同的啓發式弄清楚如果存在於第一個列表中。所以,我必須在第二個列表中爲每個名字查詢第一個列表2-3次。希望,這是有道理的。
哇。哈希映射(字典)可能不是是您正在尋找的結構。
而不是使用字符串,嘗試一種表示,可以給你很好和快速散列。或者你真的存儲字符串?如果是這樣,分析前一句中的「可能」。
您能否介紹一下您正在處理的問題?
編輯了詳細的問題 – Boolean 2011-03-30 07:27:33
PyTables http://www.pytables.org/moin 它用於存儲大型數據集。在你的情況下,一個字典=一個表
從你的描述,它聽起來就像你不妨這樣做:
set(names1).intersection(set(names2))
,對嗎?
無論哪種方式,這聽起來像問題是你的算法很慢,而不是Python的哈希表的實現。
即使不使用類或方法調用,也要將代碼放入函數中並調用該函數。 Python的函數高度優化,部分原因是它比全局變量更快地訪問局部變量。
在Python維基上的Python Performance Tips文章是關於這個話題的很好的閱讀。
問題:這是一個縮放問題嗎?當你有兩倍的數據時,你是否發現代碼運行速度超過兩倍?是否有可能耗盡物理內存並使用交換內存?
1000萬個字符串,每個100個字符都是千兆字節。如果你有2套那樣,這將是2千兆字節,這接近32位WinXP進程的限制。
如果你不已經知道這個問題的答案,我會建議運行測試與各種尺寸的數據庫(10次冪或2),看看性能曲線的不連續性。
爲什麼不使用數據庫? – Geo 2011-03-30 07:30:34
數據庫沒有任何意義。 – Boolean 2011-03-30 07:34:16
我發現很難相信那麼字典查找是瓶頸。Python字典速度很快,並且對於所有密鑰都是字符串的情況也有優化。你確定時間沒有被採用嗎?「應用不同的啓發式」?你有沒有字典查找基準? – Duncan 2011-03-30 07:52:03