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

标签 python types

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

doodahs = {
0-256: "FOO",
257: "BAR",
258: "FISH",
279: "MOOSE",
280-65534: "Darth Vader",
65535: "Death to all newbies" }

我有相对较多的这类数据集,所以我可以定义字典(或接近字典)的方式并通过索引访问。

哦,这是在 Python 2.4 上,所以如果你想让我使用更新的版本,请给出非常好的升级理由(我会选择 3 :)

最佳答案

我会将范围拆分为一个元组,然后在您的类(class)中,将项目保存在有序列表中。您可以使用 bisect插入 O(n) 和查找 O(logn) 的模块。

如果你正在将一个字典转换为你的新类,你可以构建一个无序列表并在最后对其进行排序

doodahs = [
    (0, 256, "FOO"),
    (257, 257, "BAR"),
    (258, 258, "FISH"),
    (279, 279, "MOOSE"),
    (280, 65534, "Darth Vader"),
    (65535, 65535, "Death to all newbies")]

您的 __getitem__ 可能会像这样工作:

def __getitem__(self, key):
    return self.doodahs[bisect.bisect(self.doodahs, (key,))]

__setitem__ 可能是这样的:

def __setitem__(self,range,value):
    bisect.insort(self.doodahs, range+(value,))

关于python - 存储映射到字符串的整数以便键可以是 python 中的范围的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1606150/

相关文章:

python - 将所有灰度像素值转换为黑色

python - 如何将 '>' 更改为 '>' 并将 '>' 更改为 '>' ?

Python 将日期字符串转换为日期时间

javascript - TypeScript 第二个参数类型基于第一个参数类型

java - 实现接口(interface)的方法的返回类型

python - 在不使用 split() 的情况下拆分文本时出现问题

python - 避免插入 SQL 表中已有的记录

objective-c - 当我们只能使用 NSObject 时,为什么还要使用 id?

python - 为什么 enumerate、zip、range 类型不属于 types.GeneratorType?

variables - 在 WebGL 中,属性、统一变量和变化变量之间有什么区别?