web-dev-qa-db-ja.com

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

非常にい。セットをシリアル化/逆シリアル化するより良い方法はありますか?

22
ov7a

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

reprのヘルプ:

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

このようにしてみてください

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

シリアル化されたテキストを人間が読めるようにする必要がない場合は、 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])
2
Kevin

質問のタイトルが文字列とセット変換について尋ねているので、質問はほとんど不明ですが、最後の質問はどのようにシリアル化するのですか? !

シリアル化 の概念を更新してみましょう。これは、オブジェクトを参照するオブジェクトを含むオブジェクトをバイトデータのストリームとしてエンコードするプロセスです。

シリアル化に関心がある場合は、次を使用できます。

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