的数据结构应满足以下目的: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