我使用常规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]:
我应该使用哪种数据结构进行最快速的查找?
答案 0 :(得分:1)
我认为如果你只有一个顶级字典,而不是每个维度都有一个字典,那么性能会提高。以下是一些可能性:
使用元组:
if (x, y) in dictionary_structure:
print(dictionary_structure[(x, y)]["data"])
将一个坐标乘以它的可能值的数量,并添加到另一个坐标(您的键现在是整数;乘法确保x
和y
的唯一组合不会相同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
处理速度非常快,因为内部散列技术,数据大小无关紧要。但是有误报 - 所以你需要验证这是否适合你的确切问题。