当前位置: 首页 > 面试题库 >

有什么比dict()快的东西吗?

商焕
2023-03-14
问题内容

我需要一种更快的方式来存储和访问大约3GB的线k:v对。其中kastring或anintegervisnp.array()可以具有不同的形状。是否有任何对象在存储和访问此类表方面比标准python
dict快?例如,a pandas.DataFrame

据我所知,python dict是哈希表的一种非常快速的实现,有什么比我的特定情况更好的方法吗?


问题答案:

不,没有比字典更快的速度了,这是因为其索引甚至成员资格检查的复杂度约为O(1)。

将项目保存在字典中后,您就可以在固定时间内访问它们,这意味着性能问题与字典索引无关。话虽这么说,您仍然可以通过在对象及其类型上进行一些更改来加快此过程的速度,这些更改可能会在后台进行一些优化。

例如,如果您的字符串(键)不是很大,则可以实习查找键和字典键。实习是将对象缓存在内存中,或者像Python一样,将“实习”字符串表缓存在内存中,而不是将它们创建为单独的对象。

Pythonintern()sys模块内提供了一个可用于此目的的功能。

在“ interned”字符串表中输入string并返回被插入的字符串–它是字符串本身或副本。实习字符串对于提高 字典查找的 性能很有用…

还…

如果对字典中的键进行了intern,并且对查找键进行了intern,则可以通过指针比较而不是字符串比较来完成键比较(散列后)。这减少了对对象的访问时间。

这是一个例子:

In [49]: d = {'mystr{}'.format(i): i for i in range(30)}

In [50]: %timeit d['mystr25']
10000000 loops, best of 3: 46.9 ns per loop

In [51]: d = {sys.intern('mystr{}'.format(i)): i for i in range(30)}

In [52]: %timeit d['mystr25']
10000000 loops, best of 3: 38.8 ns per loop


 类似资料:
  • 问题内容: 我想浏览Mongoose存储在Mongodb中的原始数据。去哪儿了?我有一个名为Profile的模式,其中存储了多个配置文件,但是使用Mongodb shell ,并且不返回任何内容。 架构 问题答案: 使用Mongoose时的默认集合名称是小写的复数模型名称。 因此,如果要为as 创建模型: 集合名称是; 因此您将在shell中找到其内容。 请注意,如果您不喜欢默认行为,则可以提供自

  • 本文摘自flappy bird娱乐教程的第6天--http://www.kilobolt.com/day-6-adding-graphics---welcome-to-the-necropolis.html 这是我在游戏中使用的纹理图像文件。它是一个256px64px.png文件。 这里是我用来加载纹理的类,以及我希望SpriteBatch绘制的特定的TextureRegion(纹理的一部分)。

  • 问题内容: 示例代码在这里 问题答案: 我认为速度更快,因为使用矢量化方式和熊猫构建在此数组上。 慢,因为它使用。 操作是最快的,然后是。 请参阅此答案,并更好地解释pandas开发人员。

  • 问题内容: 我不知道为什么numba在这里击败numpy(超过3倍)。我在这里进行基准测试时是否犯了一些根本性的错误?对于numpy来说似乎是完美的情况,不是吗?请注意,作为检查,我还运行了一个结合了numba和numpy的变体(未显示),正如预期的那样,它与不带numba的numpy运行相同。 (顺便说一下,这是一个后续问题:数字处理二维数组的最快方法:dataframe vs series v

  • 问题内容: 在运行时崩溃的异常堆栈中,Swift经常说参数是Dead或Exploded。这是什么意思,对于调试目的是否重要? 例如: 谢谢。 问题答案: 这是什么意思? Swift编译器出于多种原因标记函数自变量,这些原因大多与内部优化有关。对于您的问题,我们将集中讨论mangler,因为这正是导致您漂亮的堆栈跟踪和Node Printer的原因。截止本文发稿时,函数specialization

  • 问题内容: 许多Java书籍都将该语句描述为比该语句快。但是我没有找到任何地方为什么切换比if更快。 例 我有一种情况,我必须选择两项中的任何一项。我可以使用 要么 考虑item和BREAD是一个恒定的int值。 在上面的示例中,哪个操作更快,为什么? 问题答案: 因为有很多情况下,有一些特殊的字节码可以有效地评估switch语句。 如果使用IF语句实现,则将进行检查,跳转到下一个子句,进行检查,