設置爲字符串。顯式:Python將字符串轉換爲字符串,反之亦然
>>> 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])
非常難看。是否有更好的方法來序列化/反序列化集?
設置爲字符串。顯式:Python將字符串轉換爲字符串,反之亦然
>>> 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])
非常難看。是否有更好的方法來序列化/反序列化集?
使用repr
和eval
:
>>> s = set([1,2,3])
>>> strs = repr(s)
>>> strs
'set([1, 2, 3])'
>>> eval(strs)
set([1, 2, 3])
注意eval
是不是安全的,如果字符串的來源不明,喜歡ast.literal_eval
更安全的轉換:
>>> from ast import literal_eval
>>> s = set([10, 20, 30])
>>> lis = str(list(s))
>>> set(literal_eval(lis))
set([10, 20, 30])
幫助上repr
:
repr(object) -> string
Return the canonical string representation of the object.
For most object types, eval(repr(object)) == object.
嘗試這樣,
>>> 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)'
我不認爲這是OP想要做的。 – arshajii
問題是:* Python將設置爲**字符串**,反之亦然*。 –
如果您不需要序列化的文字是人類可讀的,你可以使用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])
ast.literal_eval,不EVAL – georg
@ thg435補充說爲好。 –