2024-10-17 08:24:57 发布
网友
在数据库中,我将python的str字典表示为varchars,并且我想检索原始的python字典
如何根据一个词的str表示来重新拥有一本词典?
>>> dic = {u'key-a':u'val-a', "key-b":"val-b"} >>> dicstr = str(dic) >>> dicstr "{'key-b': 'val-b', u'key-a': u'val-a'}"
在这个例子中,dicstr将变成一个可用的python字典。
您可以使用eval()或ast.literal_eval()。大多数repr()字符串可以重新计算为原始对象:
eval()
ast.literal_eval()
repr()
>>> import ast >>> ast.literal_eval("{'key-b': 'val-b', u'key-a': u'val-a'}") {'key-b': 'val-b', u'key-a': u'val-a'}
对于简单的dict来说,ast.literal_eval可能是这样做的,但是您可能应该重新考虑您的设计,而不是首先将这样的文本保存到数据库中。e、 g
ast.literal_eval
import collections d = {'a':1, 'b': collections.defaultdict()} import ast print ast.literal_eval(repr(d))
这不起作用,抛出ValueError('malformed string')基本上,如果dict包含任何非基本类型,就不会被转换回dict。
ValueError('malformed string')
更好的方法是使用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反序列化良好
repr
json.dumps
json.loads
使用ast.literal_eval(),在这种情况下,首选repr()而不是str(),因为str()不能保证字符串可以转换回有用的对象。
str()
In [7]: import ast In [10]: dic = {u'key-a':u'val-a', "key-b":"val-b"} In [11]: strs = repr(dic) In [12]: strs Out[12]: "{'key-b': 'val-b', u'key-a': u'val-a'}" In [13]: ast.literal_eval(strs) Out[13]: {u'key-a': u'val-a', 'key-b': 'val-b'}
您可以使用
eval()
或ast.literal_eval()
。大多数repr()
字符串可以重新计算为原始对象:对于简单的dict来说,
ast.literal_eval
可能是这样做的,但是您可能应该重新考虑您的设计,而不是首先将这样的文本保存到数据库中。e、 g这不起作用,抛出
ValueError('malformed string')
基本上,如果dict包含任何非基本类型,就不会被转换回dict。更好的方法是使用pickle或json之类的工具转储dict
摘要:使用
repr
序列化、使用ast.literal_eval
反序列化不正确、使用json.dumps
序列化和使用json.loads
反序列化良好使用
ast.literal_eval()
,在这种情况下,首选repr()
而不是str()
,因为str()
不能保证字符串可以转换回有用的对象。相关问题 更多 >
编程相关推荐