2012-01-25 16 views
7

pytables no admite nativamente diccionarios de python. La manera en que yo he acercado que es hacer una estructura de datos de la forma:¿Cómo deben almacenarse los diccionarios python en pytables?

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

(nótese que asegurarse de que las teclas son < 40 caracteres de longitud) y luego crear una tabla con la siguiente estructura:

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

y luego rellenarlo con:

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

y recuperar datos con:

dict(file_handle.dictionary.read()) 

Esto funciona bien, pero volver a leer el diccionario es extremadamente lento. Creo que el problema es que la función read() está causando que todo el diccionario se cargue en la memoria, lo que en realidad no debería ser necesario. ¿Hay una mejor manera de hacer esto?

Respuesta

5

Puede solicitar a PyTables que busque dentro de la tabla, y también crear un índice en la columna clave para acelerarlo.

Para crear un índice:

table.cols.key.createIndex() 

Para consultar los valores en key es igual a la variable search_key:

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

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

Cuestiones relacionadas