的數據結構應滿足以下目的:Python數據結構設計
- 每個對象是與某些鍵 - 值對
- 的鍵和值不是預先確定的獨特的,並且可以包含任何的字符串值
- 查詢的對象應該是快速
實施例:
object_123({'stupid':True, 'foo':'bar', ...})
structure.get({'stupid':True, 'foo':'bar', ...})
應該返回object_123
最理想這種結構與可通過標準庫標準Python數據結構來實現。
你將如何實現這一點?
的數據結構應滿足以下目的:Python數據結構設計
實施例:
object_123({'stupid':True, 'foo':'bar', ...})
structure.get({'stupid':True, 'foo':'bar', ...})
應該返回object_123
最理想這種結構與可通過標準庫標準Python數據結構來實現。
你將如何實現這一點?
我能想到的最簡單的解決方法是使用排序的元組鍵:無論是在一類或只是包裝他們
def key(d): return tuple(sorted(d.items()))
x = {}
x[key({'stupid':True, 'foo':'bar', ...})] = object_123
x.get(key({'stupid':True, 'foo':'bar', ...})) => object_123
另一種辦法是拿出自己的散列方案爲您的鑰匙(使用字典中的數字鍵),但取決於您的訪問模式,這可能會更慢。
+1:創建「凍結字典」的好方法。 – 2011-04-06 19:48:34
哈!你擊敗了我 – inspectorG4dget 2011-04-06 19:48:44
+1,儘管我的一部分人想知道是否有一種名爲tuple的方法可能會有幫助... – ncoghlan 2011-04-07 08:20:34
我認爲SQLite或者是你所需要的。它可能不能用標準的python結構來實現,但它可以通過標準庫來實現。
說object_123
是一個字典,它看起來很像。你的structure
似乎是一個標準的字典,如(('foo', 'bar'), ('stupid', True))
;換句話說,tuple(sorted(object_123.items()))
,以便它們始終按照定義的順序列出。
定義的順序的原因是因爲dict.items()
不保證以給定的順序返回列表。如果您的字典密鑰是(('foo', 'bar'), ('stupid', True))
,那麼您不希望僅因爲您正在搜索(('stupid', True),('foo', 'bar'))
而產生誤報。對值進行排序可能是防止這種情況的最快方法。
@ahojnnes:作業? – phooji 2011-04-06 19:43:22
@phooji:不,我想不出任何干淨和良好的實施,並尋求專家的意見。 – 2011-04-06 19:47:17
@ phooji:我也想知道,但他的其他問題似乎是合法的。 – 2011-04-06 19:48:35