2009-09-27 19 views
5

मैं पायथन में शेल्व मॉड्यूल का उपयोग कर एक कुंजी के रूप में एक टुपल (1,2,3) का उपयोग करना चाहता हूं। मैं शब्दकोशों के साथ ऐसा कर सकते हैं:शेल्फ में कुंजी के रूप में टुपल का उपयोग करने का कोई तरीका? (पायथन)

d = {} 
d[(1,2,3)] = 4 

लेकिन अगर मैं टांड़ के साथ प्रयास करें:

s = shelve.open('myshelf') 
s[(1,2,3)] = 4 

मैं:

: "लेखन त्रुटि स्ट्रिंग या पूर्णांक वस्तु कुंजी के लिए उम्मीद, टपल मिला" कोई सुझाव?

उत्तर

6

कैसे रेपर() टपल के उपयोग के बारे में:

s[repr((1,2,3))] = 4 
7

docs के अनुसार,

the values (not the keys!) in a shelf can be essentially arbitrary Python objects

मेरे जोर: शेल्फ कुंजी तार, अवधि होना चाहिए। तो, आपको अपने टुपल को एक स्ट्र में बदलना होगा; ट्यूपल में आपके पास क्या होगा, repr, कुछ separator.join, पिकलिंग, मार्शलिंग इत्यादि, उस उद्देश्य के लिए उपयोगी रूप से नियोजित किए जा सकते हैं।

1

यदि आप आर्बिट्रे कुंजी चाहते हैं तो शब्दकोशों के साथ क्यों न रहें? दूसरा विकल्प repr या str विधि को स्ट्रिंग में बदलने के लिए अपने टुपल के चारों ओर एक रैपर क्लास बनाना है। मैं एक पुस्तकालय (अलमारियों के लिए प्राकृतिक प्रतिक्रिया) के बारे में सोच रहा हूं - आपका ट्यूपल Dewey decimal में तत्व हो सकता है और str एक समेकित पूर्ण प्रतिनिधित्व बनाता है।

0

यह एक पुराना सवाल हो सकता है, लेकिन मुझे एक ही समस्या थी।

मैं अक्सर शेल्व का उपयोग करता हूं और अक्सर गैर-स्ट्रिंग कुंजी का उपयोग करना चाहता हूं। मैंने शेल्व-मॉड्यूल क्लास को एक शेल्फ में उप-वर्गीकृत किया जो स्वचालित रूप से गैर-स्ट्रिंग-कुंजी को स्ट्रिंग-कुंजी में परिवर्तित करता है और पूछे जाने पर उन्हें मूल रूप में देता है। यह पाइथन की मानक अपरिवर्तनीय वस्तुओं के लिए अच्छी तरह से काम करता है: int, float, string, tuple, boolean।

यह पाया जा सकता है: https://github.com/North-Guard/simple_shelve

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

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