2013-07-08 4 views
11

स्ट्रिंग पर सेट करें। स्पष्ट:पायथन कनवर्ट स्ट्रिंग पर सेट और इसके विपरीत

>>> s = set([1,2,3]) 
>>> s 
set([1, 2, 3]) 
>>> str(s) 
'set([1, 2, 3])' 

सेट करने के लिए स्ट्रिंग? शायद इस तरह?

>>> set(map(int,str(s).split('set([')[-1].split('])')[0].split(','))) 
set([1, 2, 3]) 

बेहद बदसूरत। सेट को क्रमबद्ध/deserialize करने के लिए बेहतर तरीका है?

उत्तर

10

उपयोग repr और eval:

>>> from ast import literal_eval 
>>> s = set([10, 20, 30]) 
>>> lis = str(list(s)) 
>>> set(literal_eval(lis)) 
set([10, 20, 30]) 

मदद पर repr:

>>> s = set([1,2,3]) 
>>> strs = repr(s) 
>>> strs 
'set([1, 2, 3])' 
>>> eval(strs) 
set([1, 2, 3]) 

ध्यान दें कि eval सुरक्षित करता है, तो तार का स्रोत अज्ञात है नहीं है, सुरक्षित रूपांतरण के लिए पसंद करते हैं ast.literal_eval

repr(object) -> string 
Return the canonical string representation of the object. 
For most object types, eval(repr(object)) == object. 
+1

ast.literal_eval, – georg

+0

eval नहीं @ thg435 कहा कि रूप में अच्छी तरह। –

5

कोशिश इस तरह,

>>> s = set([1,2,3]) 
>>> s = list(s) 
>>> s 
[1, 2, 3] 

>>> str = ', '.join(str(e) for e in s) 
>>> str = 'set(%s)' % str 
>>> str 
'set(1, 2, 3)' 
+2

मुझे नहीं लगता कि यह वही है जो ओपी करना चाहता है। – arshajii

+0

प्रश्न है: * पायथन कनवर्ट ** स्ट्रिंग ** और इसके विपरीत * पर सेट करें। –

2

आप धारावाहिक पाठ की जरूरत नहीं है मानव पठनीय होने के लिए आपको pickle उपयोग कर सकते हैं।

import pickle 

s = set([1,2,3]) 

serialized_s = pickle.dumps(s) 
print "serialized:" 
print serialized_s 

deserialized_s = pickle.loads(serialized_s) 
print "deserialized:" 
print deserialized_s 

परिणाम:

serialized: 
c__builtin__ 
set 
p0 
((lp1 
I1 
aI2 
aI3 
atp2 
Rp3 
. 
deserialized: 
set([1, 2, 3]) 
संबंधित मुद्दे