1. ホーム
  2. python

Python の辞書を文字列に直列化し、また辞書に戻すにはどうしたらいいですか?

2023-08-11 08:16:01

質問

Pythonの辞書を文字列に直列化し、また辞書に戻すにはどうしたらよいでしょうか。辞書はその中にリストと他の辞書を持つことになります。

どのように解決するのですか?

何に使いたいかによります。保存したいだけなら pickle (あるいは、CPython 2.xを使っているのなら cPickle の方が速いです)。

>>> import pickle
>>> pickle.dumps({'foo': 'bar'})
b'\x80\x03}q\x00X\x03\x00\x00\x00fooq\x01X\x03\x00\x00\x00barq\x02s.'
>>> pickle.loads(_)
{'foo': 'bar'}

読みやすいようにしたい場合は json :

>>> import json
>>> json.dumps({'foo': 'bar'})
'{"foo": "bar"}'
>>> json.loads(_)
{'foo': 'bar'}

json はしかし、サポートするものが非常に限られています。 pickle は任意のオブジェクトに使用することができます(自動的に動作しない場合、クラスは __getstate__ を定義して、どのようにピクルスにするかを正確に指定することができます)。

>>> pickle.dumps(object())
b'\x80\x03cbuiltins\nobject\nq\x00)\x81q\x01.'
>>> json.dumps(object())
Traceback (most recent call last):
  ...
TypeError: <object object at 0x7fa0348230c0> is not JSON serializable