Python将set转换为string,反之亦然

时间:2013-07-08 13:49:29

标签: python string python-2.7 set

设为字符串。显而易见的:

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

非常难看。是否有更好的方法来序列化/反序列化集?

5 个答案:

答案 0 :(得分:27)

使用repreval

>>> 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.

答案 1 :(得分:7)

试试这个,

>>> 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 :(得分: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])

答案 3 :(得分:1)

1) 设置为字符串:

s = set({1,2,3,4}) # set with int values.

将 set 的每个值转换为字符串,将它们连接起来返回一个以 , 为分隔符的字符串。
str_val = ', '.join(list(map(str, s)))

str_val 的输出:'1, 2, 3, 4'

2) 要设置的字符串:

使用 , 作为分隔符分割字符串。它创建一个列表。然后将列表转换为集合。

s = set(str_val.split(","))

s 的输出:{' 2', ' 3', ' 4', '1'}

答案 4 :(得分:0)

这个问题有点不清楚,因为问题的标题是关于字符串和集合转换的问题,但是最后的问题问我如何序列化? !

让我刷新Serialization的概念是将对象(包括其引用的对象)编码为字节数据流的过程。

如果要序列化,可以使用:

DECLARE @text AS VARCHAR(10) = '//text()'
DECLARE @TSQL VARCHAR(8000)

SET @TSQL = 'select * from openquery(HHOBI,''select rtrim(xmlagg(xmlelement(e,id,'''','''').extract('''''+@text+''''') order by id).GetClobVal(),'''','''') from (select level as id from dual
connect by level)'')'

EXEC(@TSQL)

如果您的问题更多关于如何将set转换为string和要设置的string,则使用以下代码(已在Python 3中进行了测试)

要设置的字符串

json.dumps  -> serialize
json.loads  -> deserialize

设置为字符串

set('abca')

示例:

''.join(some_var_set)