Skip to main content
 首页 » 编程设计

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

2025年05月04日20bjzhanghao

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

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