存储映射到字符串的整数的最佳方法是什么,以便键可以是python中的范围?

Kim*_*ais 1 python types

存储(非可变)格式的数据的最佳方法是什么:

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 :)

Joh*_*ooy 5

我将范围拆分为元组,然后在类中,将项目保存在有序列表中.您可以使用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)