2012-01-25 12 views
7

pytables मूल रूप से पायथन शब्दकोश का समर्थन नहीं करता है। जिस तरह से मैं इस विचार के यह फार्म के एक डेटा संरचना बनाने के लिए है:पायथनों को पाइटेबल्स में कैसे संग्रहीत किया जाना चाहिए?

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() फ़ंक्शन पूरे शब्दकोश को स्मृति में लोड किया जा रहा है, जो वास्तव में आवश्यक नहीं होना चाहिए। क्या ऐसा करने के लिए इससे अच्छा तरीका है?

उत्तर

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

संबंधित मुद्दे