2010-09-24 109 views
5

我已经开始欣赏很多boost :: multi_index的C++。碰巧,我会很乐意在Python中使用类似的东西;用于处理来自数字密集型应用程序的数据的脚本。 Python有这样的东西吗?我只是想确定它不存在,然后我会尝试自己实现它。事情不会为我做:类似boost :: multi_index的Python

  • 在Python中包装boost :: multi_index。它根本不会缩放。

  • 在内存中使用sqlite3。这是丑陋的。

+0

这个答案有点相关:http://stackoverflow.com/questions/3070598/is-there-an-equivalent-of-boostmulti-index-for-java-someplace/3642996#3642996 – Gunslinger47 2010-09-24 16:08:05

+0

一个实现是在https://stackoverflow.com/a/2296976/3142913 – 2017-12-24 21:40:02

回答

1

要回答你是否存在类似的东西在Python中的问题,我会说不。

Boost.MultiIndex的一个有用的功能是可以在原地修改元素(通过replace()或modify())。 Python的本地字典不提供这样的功能,并要求密钥是不可变的。我还没有看到其他实现允许更改密钥。所以在这个特定领域,Python中没有像Boost.MultiIndex那样的东西。

如果您只需要多个静态数据视图,那么我会同意Radomir Dopieralski。您可以在自己的类中包装多个字典以提供统一的API,以确保不同视图之间的同步。我不知道“性能感知转换”是什么意思,但是如果您正在谈论插入/删除操作的计算复杂性,即使使用Boost.MultiIndex,“将元素插入到multi_index_container中也可以简化为对每个索引进行基本插入操作,并且类似地删除。“

+0

是的,一年和所以在提出这个问题之后,我怀疑这一点。不过,我也了解到,python支持的数据库动物园中有足够的多样性,其中一个可能实际上解决了这个问题。 – dsign 2012-01-30 14:12:45

2

因为Python集合只存储对象的引用,而不是对象本身,孤单是不是有一个收集与多个索引方案,并且仅仅有多个集合太大的区别。

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

+1

Yeap,但是这留下了很多重要问题:在修改ops,迭代器投影,性能感知转换之间的不同索引之间的同步... – dsign 2010-09-25 13:00:14