如何在pytables中存储Python字典?
pytables 并不直接支持 Python 字典。我的做法是创建一个这样的数据结构:
tables_dict = {
'key' : tables.StringCol(itemsize=40),
'value' : tables.Int32Col(),
}
(注意我确保键的长度不超过 40 个字符),然后用这个结构创建一个表:
file_handle.createTable('/', 'dictionary', tables_dict)
接着用以下方式填充数据:
file_handle.dictionary.append(dictionary.items())
并用下面的方法来获取数据:
dict(file_handle.dictionary.read())
这样做是可以的,但把字典读回来时非常慢。我觉得问题在于 read()
函数让整个字典都加载到内存中,这其实并不必要。有没有更好的方法呢?
1 个回答
5
你可以让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