类似于boost::multi_index的Python库是什么?

5
我很欣赏C++中的boost::multi_index。我希望在处理从数值密集型应用程序输出的数据的脚本中使用类似于Python的东西。是否有这样的Python工具?如果不存在,我将尝试自己实现它。以下是不适合我的工具:
- 将boost::multi_index包装在Python中。它根本无法扩展。 - 在内存中使用sqlite3。它很丑陋。

这个答案有些相关:https://dev59.com/4nA75IYBdhLWcg3w186G#3642996 - Gunslinger47
一个实现已经给出,网址为https://dev59.com/iEzSa4cB1Zd3GeqPjQ8S#2296976 - Mark Lawrence
2个回答

2

由于Python集合只存储对象的引用而不是对象本身,因此在具有多个索引方案的单个集合和具有多个集合之间几乎没有太大区别。

例如,您可以使用几个字典来存储数据,每个字典使用不同的键来引用它们。


1
是的,但这样就忽略了很多重要问题:在修改操作下不同索引之间的同步、迭代器投影、性能感知变换... - dsign

1
回答你的问题,是否在Python中存在类似的东西,我会说没有。
Boost.MultiIndex的一个有用特性是元素可以通过replace()或modify()进行就地修改。Python的本地dict不提供这样的功能,并且需要键是不可变的。我没有看到其他允许更改键的实现。因此,在这个特定领域,Python中没有与Boost.MultiIndex相媲美的东西。
如果您只需要多个静态视图来查看数据,则我同意Radomir Dopieralski的观点。您可以将多个dict包装在自己的类中,以提供统一的API,以确保不同视图之间的同步。我不知道您所说的“性能感知转换”是什么意思,但如果您谈论插入/删除操作的计算复杂度,即使使用Boost.MultiIndex,“将元素插入multi_index_container归结为对每个索引上的基本插入操作的简单组合,删除也是如此”。

是的,在提出这个问题一年左右后,我怀疑了这个问题。然而,我也学到了Python支持的数据库种类非常丰富,其中之一可能会解决这个问题。 - dsign

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接