2012-01-25 28 views
7

pytables không tự nhiên hỗ trợ từ điển python. Con đường tôi đã tiếp cận nó là để tạo ra một cấu trúc dữ liệu có dạng:Làm thế nào để từ điển python được lưu trữ trong pytables?

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

(lưu ý rằng tôi đảm bảo rằng các phím < 40 ký tự) và sau đó tạo ra một bảng sử dụng cấu trúc này:

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

và sau đó cư nó với:

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

và lấy dữ liệu với:

dict(file_handle.dictionary.read()) 

Điều này hoạt động tốt, nhưng việc đọc từ điển trở lại cực kỳ chậm. Tôi nghĩ rằng vấn đề là chức năng read() gây ra toàn bộ từ điển được nạp vào bộ nhớ, mà thực sự không cần thiết. Có cách nào tốt hơn để làm điều này?

Trả lời

5

Bạn có thể yêu cầu PyTables tìm kiếm bên trong bảng và cũng tạo chỉ mục trên cột khóa để tăng tốc độ đó.

Để tạo một chỉ số:

table.cols.key.createIndex() 

Để truy vấn các giá trị nơi key bằng biến search_key:

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

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

Các vấn đề liên quan