Reputation: 1594
Set to string. Obvious:
>>> s = set([1,2,3])
>>> s
set([1, 2, 3])
>>> str(s)
'set([1, 2, 3])'
String to set? Maybe like this?
>>> set(map(int,str(s).split('set([')[-1].split('])')[0].split(',')))
set([1, 2, 3])
Extremely ugly. Is there better way to serialize/deserialize sets?
Upvotes: 47
Views: 157729
Reputation: 156
if the len of the set 1
>>> s
{'[email protected]'}
>>> list(s)[0]
'[email protected]'
if the set has more than one value
>>> def set2str(l, spe=' - '):
s=''
for i in l:
s += f'{i}{spe}'
return s[:len(s) - len(spe)]
>>> s.add('asfasf')
>>> set2str(s)
'asfasf - [email protected]'
>>> set2str(s,' ') # you can change the spe
'asfasf [email protected]'
Upvotes: 0
Reputation: 715
s = set({1,2,3,4}) # set with int values.
Convert each value of set as a string, and join them to return one string with ,
as a delimiter.
str_val = ', '.join(list(map(str, s)))
output of str_val
: '1, 2, 3, 4'
Split the string with ,
as a delimiter. It creates a list. Then convert the list as a set.
s = set(str_val.split(","))
output of s
: {' 2', ' 3', ' 4', '1'}
Upvotes: 6
Reputation: 22392
The question is little unclear because the title of the question is asking about string and set conversion but then the question at the end asks how do I serialize ? !
let me refresh the concept of Serialization is the process of encoding an object, including the objects it refers to, as a stream of byte data.
If interested to serialize you can use:
json.dumps -> serialize
json.loads -> deserialize
If your question is more about how to convert set to string and string to set then use below code (it's tested in Python 3)
String to Set
set('abca')
Set to String
''.join(some_var_set)
example:
def test():
some_var_set=set('abca')
print("here is the set:",some_var_set,type(some_var_set))
some_var_string=''.join(some_var_set)
print("here is the string:",some_var_string,type(some_var_string))
test()
Upvotes: 13
Reputation: 76244
If you do not need the serialized text to be human readable, you can use 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
Result:
serialized:
c__builtin__
set
p0
((lp1
I1
aI2
aI3
atp2
Rp3
.
deserialized:
set([1, 2, 3])
Upvotes: 3
Reputation: 21466
Try like this,
>>> 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)'
Upvotes: 7
Reputation: 251096
Use repr
and eval
:
>>> s = set([1,2,3])
>>> strs = repr(s)
>>> strs
'set([1, 2, 3])'
>>> eval(strs)
set([1, 2, 3])
Note that eval
is not safe if the source of string is unknown, prefer ast.literal_eval
for safer conversion:
>>> from ast import literal_eval
>>> s = set([10, 20, 30])
>>> lis = str(list(s))
>>> set(literal_eval(lis))
set([10, 20, 30])
help on repr
:
repr(object) -> string
Return the canonical string representation of the object.
For most object types, eval(repr(object)) == object.
Upvotes: 53