2014-07-01 6 views
6

मैं नमूना सामान नीचे दिखाया गया सांकेतिक शब्दों में बदलना चाहते हैं:पायथन शब्दकोश को एन्कोड कैसे करें?

name = "Myname" 
status = "married" 
sex = "Male" 
color = {'eyeColor' : 'brown', 'hairColor' : 'golden', 'skinColor' : 'white'} 

मैं बेस 64 एन्कोडिंग योजना का उपयोग कर रहा हूँ और <field-name>.encode('base64','strict') के रूप में इस्तेमाल किया वाक्य रचना जहां field-name होते हैं के ऊपर fields- नाम, स्थिति और इतने पर उल्लेख किया है।

शब्दकोश "रंग" को छोड़कर सबकुछ एन्कोड हो रहा है। मैं color.encode('base64','strict')

में त्रुटि मिलती है त्रुटि के रूप में नीचे दिखाया गया है:

Traceback (most recent call last): 
    color.encode('base64','strict') 
AttributeError: 'CaseInsensitiveDict' object has no attribute 'encode' 

मुझे लगता है कि एनकोड विधि शब्दकोश पर appicable नहीं है। मैं एक बार में पूर्ण शब्दकोश को कैसे एन्कोड करूँगा? क्या encode विधि के लिए कोई विकल्प है जो शब्दकोशों पर लागू होता है?

+0

पूरा शब्दकोश बेस 64 एन्कोडिंग प्रारूप में एन्कोड किया जाना चाहिए। – v1h5

+0

एक विकल्प शब्दकोश में प्रवेश करना, फ़ील्ड लाने, उन्हें अलग-अलग एन्कोड करना और उन्हें स्टोर करना है। लेकिन मैं परेशानी मुक्त विकल्प की तलाश में हूं। – v1h5

उत्तर

12

encode एक तरीका है जो स्ट्रिंग उदाहरणों में, शब्दकोश नहीं है। आप बस हर वस्तु के हर उदाहरण के साथ इसका उपयोग नहीं कर सकते हैं। तो सबसे सरल समाधान के पहले शब्दकोश पर str कॉल करने के लिए होगा:

str(color).encode('base64','strict') 

बहरहाल, यह कम है सीधे आगे है जब आप अपने स्ट्रिंग डिकोड और कहा कि शब्दकोश वापस पाने के लिए चाहते हैं। पाइथन के पास ऐसा करने के लिए एक मॉड्यूल है, इसे pickle कहा जाता है। अचार आपको किसी ऑब्जेक्ट का स्ट्रिंग प्रस्तुति प्राप्त करने में मदद कर सकता है, जिसे आप बेस 64 पर एन्कोड कर सकते हैं। इसे वापस डीकोड करने के बाद, आप मूल उदाहरण वापस पाने के लिए इसे अनपिक भी कर सकते हैं।

b64_color = pickle.dumps(color).encode('base64', 'strict') 
color = pickle.loads(b64_color.decode('base64', 'strict')) 

अन्य विकल्प अचार के लिए + बेस 64 json हो सकता है।

+0

अद्भुत। धन्यवाद @ कोरम। यह एक मणि की तरह काम कर रहा है। +1 जैसा कि मुझे नए विषय "अचार" के बारे में पता चला है – v1h5

+0

एक पसंदीदा तरीका क्या होगा जो कम स्मृति का उपभोग भी करेगा? तुम्हारा पहला विकल्प या पिकलिंग ?? – v1h5

+0

@ v1h5 किस उद्देश्य के लिए? मैं 'अचार' या 'सीपीकल' के साथ जाऊंगा – Korem

-1
# Something like this works on Python 2.7.12 
from base64 import b64decode 
color = {'eyeColor' : 'brown', 'hairColor' : 'golden', 'skinColor' : 'white'} 
encoded_color = str(color).encode('base64','strict') 
print(encoded_color) 

decoded_color = b64decode(encoded_color) 
print(decoded_color) 
संबंधित मुद्दे