2012-01-25 11 views
7

obiekty pytables nie obsługują natywnych słowników Pythona. Sposób, w jaki ja to podszedł do struktury danych w postaci:W jaki sposób powinny być przechowywane słowniki python w pytables?

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

(zauważ, że upewnić się, że klawisze są < 40 znaków), a następnie utworzyć tabelę przy użyciu tej struktury:

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

a następnie wypełnić go z:

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

i pobierać dane z:

dict(file_handle.dictionary.read()) 

To działa poprawnie, ale ponowne wczytanie słownika jest bardzo powolne. Myślę, że problem polega na tym, że funkcja read() powoduje załadowanie całego słownika do pamięci, co nie powinno być konieczne. Czy jest lepszy sposób to zrobić?

Odpowiedz

5

Możesz poprosić PyTables o przeszukanie wewnątrz tabeli, a także utworzyć indeks w kolumnie klucza, aby przyspieszyć.

celu utworzenia wskaźnika:

table.cols.key.createIndex() 

wyszukiwania informacji, gdzie wartości zmiennych key równa search_key:

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

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

Powiązane problemy