Что-то вроде boost :: multi_index для Python - PullRequest
5 голосов
/ 24 сентября 2010

Я высоко ценю повышение :: multi_index в C ++. Бывает, что я с удовольствием использовал бы что-то подобное в Python; для сценариев, которые обрабатывают данные, поступающие из интенсивных приложений. Есть ли такая вещь для Python? Я просто хочу быть уверенным, что этого не существует, тогда я бы попробовал реализовать это сам. Вещи, которые не сделают это для меня:

  • Wrapping boost :: multi_index в Python. Это просто не масштабируется.

  • Использование sqlite3 в памяти. Это безобразно.

Ответы [ 2 ]

2 голосов
/ 25 сентября 2010

Поскольку коллекции python хранят только ссылки на объекты, а не сами объекты, нет большой разницы между наличием одной коллекции с несколькими схемами индексации и наличием нескольких коллекций.

Например, вы можете иметь несколько диктовок с вашими данными, каждый из которых использует разные ключи для обращения к ним.

1 голос
/ 29 января 2012

Чтобы ответить на ваш вопрос о том, существует ли подобная вещь в Python, я бы сказал, что нет.

Одна полезная особенность Boost.MultiIndex заключается в том, что элементы можно изменять на месте (с помощью replace () или изменять()).Нативный язык Python не обеспечивает такой функциональности и требует, чтобы ключ был неизменным.Я не видел других реализаций, которые позволяют изменять ключ.Таким образом, в этой конкретной области нет ничего похожего на Boost.MultiIndex в Python.

Если вам требуется только несколько статических представлений ваших данных, тогда я согласен с Радомиром Доперальским.Вы можете обернуть несколько слов в ваш собственный класс, чтобы обеспечить единый API для обеспечения синхронизации между различными представлениями.Я не знаю, что вы подразумеваете под «преобразованиями с учетом производительности», но если вы говорили о вычислительной сложности операций вставки / удаления, даже с Boost.MultiIndex, «вставка элемента в multi_index_container сводится к простой комбинацииэлементарные операции вставки для каждого из индексов, а также для удаления. "

...