数字索引数据结构的最快数据结构?

时间:2015-07-02 00:51:38

标签: python arrays dictionary

我使用常规python 2.79并且只想使用标准库。我想创建一个基本上是二维数组,其中由两个维度引用的每个单元格将指向杂项数据的小字典。我想以最快的方式访问包含字典的单元格。数据将有两个整数索引,我可以通过它引用每个单元格。我已经知道了x和y(让我们称之为..)

1)x和y元素的允许值介于-58600和+58600之间。

2)并非每个单元格都包含信息,但我需要快速查找并通过数字x,y索引获取单元格数据。

3)数据单元的内容可以是任何大小或配置,并且可以随着时间的推移而改变,因为我升级代码或包含新参数等。

我的第一个想法是嵌套字典

dictionary_structure[x][y]["data"] 

将查找数据..或通过

测试存在
if "data" in dictionary_structure[x][y]:

我应该使用哪种数据结构进行最快速的查找?

2 个答案:

答案 0 :(得分:1)

我认为如果你只有一个顶级字典,而不是每个维度都有一个字典,那么性能会提高。以下是一些可能性:

使用元组:

if (x, y) in dictionary_structure:
    print(dictionary_structure[(x, y)]["data"])

将一个坐标乘以它的可能值的数量,并添加到另一个坐标(您的键现在是整数;乘法确保xy的唯一组合不会相同key - 但是将键计算包装在函数中;您还可以使用除法和模从键中提取x和y):

key = 117201 * x + y
if key in dictionary_structure:
    print(dictionary_structure[key]["data"])

我不知道在你的情况下哪一个会更快;你需要自己测量它。

答案 1 :(得分:0)

最内层的布隆过滤器。以下是一些实现:

https://github.com/bitly/dablooms

https://github.com/axiak/pybloomfiltermmap

https://bitbucket.org/crankycoder/hydra/src

处理速度非常快,因为内部散列技术,数据大小无关紧要。但是有误报 - 所以你需要验证这是否适合你的确切问题。