2013-08-27 18 views
1

以下問題我在這裏問(Most appropriate way to combine features of a class to another?)我得到了一個答案,我終於明白了。總之我打算現在有一堆字典,每個字典看起來有點像這樣:正確的方式來保存python字典,並在稍後階段檢索它們

{ "url": "http://....", "parser": SomeParserClass } 

但更多的屬性可能在以後添加,但將包括字符串或一些其他類。 現在我的問題是:什麼是保存這些對象的最佳方式?

我想到了3個解決方案,不知道哪一個最好,如果還有其他更可接受​​的解決方案。

  1. 使用的泡菜,而它似乎有效地使用它將使編輯任何這些字典的痛苦,因爲它以二進制格式保存。

  2. 將每個字典保存在一個單獨的模塊中,並從一個目錄動態地導入這些模塊,每個模塊都可以在其中有一個函數來返回字典或特殊設計的變量名稱,以便從中調用它我的加載代碼。這似乎編輯更容易,但聽起來不太有效或pythonic

  3. 使用某種類型的數據庫,如MongoDB或Riak來保存這些對象,我的問題是要麼編輯這是可行的,但沒有聲音喜歡的樂趣和事實,前者2配備了正確的方法來保存我的解析器類內的字典,我不知道這些數據庫如何序列化或「pickle」這樣的對象。

正如你看到我的主要問題是這將是多麼容易對它們進行編輯,保存和檢索數據的效率(雖然不是一個巨大的問題,因爲我只有一對夫婦數百個這樣的)和解決方案的正確性。

那麼,有什麼想法?

非常感謝您提供任何幫助。

+0

你可能會考慮json。它支持python字典。他們也可以很容易地編輯。 – Jiminion

+0

可能有很多細節你沒有告訴/不能告訴我們會告訴你的決定。鑰匙總是一樣的類型?你的數據是否有限?然後使用JSON。如果不是,類型轉換可能會導致關鍵衝突。 Pickle對保存可排序的可執行對象特別有用,它對遞歸引用很聰明,但它也可能是一個漏洞。 「什麼是序列化Python數據的最佳方式?」實際上並不是一個主觀問題,但它對您序列化數據的性質高度敏感。 – kojiro

回答

3

使用JSON。它支持python字典,並且可以很容易地編輯。

+3

請注意,Python字典不能完美映射到JSON。特別是嘗試'json.loads(json.dumps({15:「a」,「15」:「b」}))'。 – svk

+0

此外,您將不得不爲「parser」值中的類定義特殊處理。 JSON或多或少是Python字典的一個子集; JSON可以表示爲字典,但並非所有字典都可以透明地表示爲JSON。 –

+0

非常感謝,但又是什麼將保存數據的最佳方式?當然,我現在有json格式的對象,我仍然堅持以最好的方式來保存它們,就像我原來的問題一樣。 – fred

0

您可以嘗試shelve。它建立在pickle之上,讓我們序列化對象並將它們關聯到字符串鍵。

因爲它基於dbm,它只會在您需要時訪問鍵/值。因此,如果您只需要訪問大型字典中的幾個項目,則可能比json更好,因爲它必須先將整個JSON文件加載到字典中。

相關問題