'Convert set to string and vice versa

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?



Solution 1:[1]

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)'

Solution 2:[2]

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()

Solution 3:[3]

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])

Solution 4:[4]

1) Set to String:

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'

2) String to Set:

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'}

Solution 5:[5]

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]'

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3 Kevin
Solution 4 Krishna Chaitanya Gopaluni
Solution 5 Ahmed Ellban