ast.literal_eval
単純な辞書の場合はそれを行う方法かもしれませんが、おそらく設計を再考し、最初にそのようなテキストをデータベースに保存しないでください。例えば
import collections
d = {'a':1, 'b': collections.defaultdict()}
import ast
print ast.literal_eval(repr(d))
これは機能せず、ValueError('malformed string')
基本的に、非基本型が含まれている場合は dict に変換されません。
より良い方法は、pickle や json などを使用して dict をダンプすることです。
import collections
d = {'a':1, 'b': collections.defaultdict()}
import json
print json.loads(json.dumps(d))
まとめ: を使用してrepr
シリアライズ、 を使用してデシリアライズするast.literal_eval
のは悪い、 を使用json.dumps
してシリアライズし、 を使用してデシリアライズするjson.loads
のは良い