web-dev-qa-db-fra.com

Python converti en chaîne et vice versa

Défini sur chaîne. Évident:

>>> s = set([1,2,3])
>>> s
set([1, 2, 3])
>>> str(s)
'set([1, 2, 3])'

Chaîne à définir? Peut-être comme ça?

>>> set(map(int,str(s).split('set([')[-1].split('])')[0].split(',')))
set([1, 2, 3])

Extrêmement moche. Existe-t-il un meilleur moyen de sérialiser/désérialiser des ensembles?

16
ov7a

Utilisez repr et eval:

>>> s = set([1,2,3])
>>> strs = repr(s)
>>> strs
'set([1, 2, 3])'
>>> eval(strs)
set([1, 2, 3])

Notez que eval n'est pas sûr si la source de la chaîne est inconnue, préférez ast.literal_eval pour une conversion plus sûre:

>>> from ast import literal_eval
>>> s = set([10, 20, 30])
>>> lis = str(list(s))
>>> set(literal_eval(lis))
set([10, 20, 30])

aide sur repr:

repr(object) -> string
Return the canonical string representation of the object.
For most object types, eval(repr(object)) == object.
21
Ashwini Chaudhary

Essayez comme ça,

>>> 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)'
4
Adem Öztaş

Si vous n'avez pas besoin que le texte sérialisé soit lisible par l'homme, vous pouvez utiliser 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

Résultat:

serialized:
c__builtin__
set
p0
((lp1
I1
aI2
aI3
atp2
Rp3
.
deserialized:
set([1, 2, 3])
2
Kevin

La question est peu claire car le titre de la question parle de conversion de chaîne et de jeu, mais la question à la fin demande comment puis-je sérialiser? !

permettez-moi de rafraîchir le concept de Sérialisation est le processus de codage d'un objet, y compris des objets auxquels il fait référence, en tant que flux de données d'octets.

Si vous êtes intéressé par la sérialisation, vous pouvez utiliser:

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

Si votre question porte davantage sur la conversion des ensembles en chaînes et des chaînes à définir, utilisez le code ci-dessous (testé en Python 3). 

String à définir

set('abca')

Set to String 

''.join(some_var_set)

exemple:

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