擅长:python、mysql、java
<p>对于简单的dict来说,<code>ast.literal_eval</code>可能是这样做的,但是您可能应该重新考虑您的设计,而不是首先将这样的文本保存到数据库中。e、 g</p>
<pre><code>import collections
d = {'a':1, 'b': collections.defaultdict()}
import ast
print ast.literal_eval(repr(d))
</code></pre>
<p>这不起作用,抛出<code>ValueError('malformed string')</code>基本上,如果dict包含任何非基本类型,就不会被转换回dict。</p>
<p><strong>更好的方法是使用pickle或json之类的工具转储dict</p>
<pre><code>import collections
d = {'a':1, 'b': collections.defaultdict()}
import json
print json.loads(json.dumps(d))
</code></pre>
<p><strong>摘要</strong>:使用<code>repr</code>序列化、使用<code>ast.literal_eval</code>反序列化不正确、使用<code>json.dumps</code>序列化和使用<code>json.loads</code>反序列化良好</p>