存储(非可变)格式的数据的最佳方法是什么:
doodahs = {
0-256: "FOO",
257: "BAR",
258: "FISH",
279: "MOOSE",
280-65534: "Darth Vader",
65535: "Death to all newbies" }
Run Code Online (Sandbox Code Playgroud)
我有相对大量的这类数据集,所以我可以定义字典(或接近它)的方式和通过索引访问.
哦,这是在Python 2.4上,所以如果你想让我使用更新的版本,请给出真正很好的升级理由(我会去3 :)
我将范围拆分为元组,然后在类中,将项目保存在有序列表中.您可以使用bisect模块进行插入O(n)和查找O(logn).
如果要将dict转换为新类,则可以构建无序列表并在最后对其进行排序
doodahs = [
(0, 256, "FOO"),
(257, 257, "BAR"),
(258, 258, "FISH"),
(279, 279, "MOOSE"),
(280, 65534, "Darth Vader"),
(65535, 65535, "Death to all newbies")]
Run Code Online (Sandbox Code Playgroud)
你__getitem__可能会这样做:
def __getitem__(self, key):
return self.doodahs[bisect.bisect(self.doodahs, (key,))]
Run Code Online (Sandbox Code Playgroud)
__setitem__ 可能是这样的:
def __setitem__(self,range,value):
bisect.insort(self.doodahs, range+(value,))
Run Code Online (Sandbox Code Playgroud)