Преобразование 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])
Чрезвычайно уродливый. Есть ли лучший способ сериализации/десериализации наборов?
Ответы
Ответ 1
Используйте 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])
help repr
:
repr(object) -> string
Return the canonical string representation of the object.
For most object types, eval(repr(object)) == object.
Ответ 2
Попробуйте это,
>>> 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)'
Ответ 3
Если вам не нужен сериализованный текст для чтения человеком, вы можете использовать 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])
Ответ 4
Вопрос немного неясен, потому что заголовок вопроса спрашивает о преобразовании строк и множеств, но затем вопрос в конце спрашивает, как мне сериализовать? !
Позвольте мне обновить концепцию " Сериализация" - это процесс кодирования объекта, включая объекты, на которые он ссылается, как поток байтовых данных.
Если вы заинтересованы в сериализации, вы можете использовать:
json.dumps -> serialize
json.loads -> deserialize
Если ваш вопрос больше о том, как преобразовать набор в строку и строку для установки, используйте приведенный ниже код (это проверено в Python 3)
Строка для установки
set('abca')
Установить в строку
''.join(some_var_set)
пример:
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()