Как хранить словари python в pytables? - PullRequest
9 голосов
/ 25 января 2012

pytables изначально не поддерживает словари python.Я подошел к этому так: создать структуру данных в форме:

tables_dict = {
'key'         : tables.StringCol(itemsize=40),
'value'       : tables.Int32Col(),
}

(обратите внимание, что я гарантирую, что ключи имеют длину <40 символов), а затем создайте таблицу, используя эту структуру: </p>

file_handle.createTable('/', 'dictionary', tables_dict)

, а затем заполните его:

file_handle.dictionary.append(dictionary.items())

и получите данные с помощью:

dict(file_handle.dictionary.read())

Это работает нормально, но чтение словаря обратно очень медленно,Я думаю, проблема в том, что функция read() вызывает загрузку всего словаря в память, что в действительности не должно быть необходимым.Есть ли лучший способ сделать это?

1 Ответ

5 голосов
/ 25 января 2012

Вы можете попросить PyTables выполнить поиск внутри таблицы, а также создать индекс для ключевого столбца, чтобы ускорить это.

Чтобы создать индекс:

table.cols.key.createIndex()

Для запроса значений, где key равно переменной search_key:

[row['value'] for row in table.where('key == search_key')]

http://pytables.github.com/usersguide/optimization.html#searchoptim

...