2012-01-25 9 views
7

Çakmaktaşları python sözlüklerini desteklemez. Ben yaklaştı ettik yolu formun bir veri yapısını yapmaktır:Python sözlükleri çakıl taşlarında nasıl saklanır?

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

(I tuşları < 40 karakter uzunluğunda olmasını sağlamak unutmayın) ve daha sonra bu yapıyı kullanarak bir tablo oluşturun:

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

ve ile doldurmak:

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

ile veri almak:

dict(file_handle.dictionary.read()) 

Bu işlem tamam, ancak sözlüğü yeniden okumak oldukça yavaş. Sorun şu ki, read() işlevinin, tüm sözlüğün belleğe yüklenmesine neden olması, bu gerçekten gerekli olmamalıdır. Bunu yapmanın daha iyi bir yolu var mı?

cevap

5

PyTables 'dan masanın içinde arama yapmasını ve bunu hızlandırmak için anahtar sütununda bir dizin oluşturmasını isteyebilirsiniz.

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

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

: key search_key değişken eşittir değerlerini sorgulamak için

table.cols.key.createIndex() 

:

bir dizin oluşturmak için