Python将字符串对象转换为字典
我一直在努力构建一个复杂的数据结构,它将返回一个字典。当前,该类返回表单的字符串对象Python将字符串对象转换为字典,python,string,dictionary,Python,String,Dictionary,我一直在努力构建一个复杂的数据结构,它将返回一个字典。当前,该类返回表单的字符串对象 { cset : x, b1 : y, b2 : z, dep : { cset : x1, b1 : y1, b2 : z1, dep : { cset :
{
cset : x,
b1 : y,
b2 : z,
dep : {
cset : x1,
b1 : y1,
b2 : z1,
dep : {
cset : x2,
b1 : y2,
b2 : z2,
dep : <same as above.it recurses few more levels>
...
}
}
}
{
cset:x,
b1:y,
b2:z,
副部长:{
cset:x1,
b1:y1,
b2:z1,
副部长:{
cset:x2,
b1:y2,
b2:z2,
副署长:
...
}
}
}
我想把整个字符串对象转换成字典。
我读了其中一篇文章来使用pickle
module,但我不想将它序列化到某个文件中并使用它
参考:
如果可能的话,我正在寻找其他更整洁的方法
了解任何此类方法都是非常好的。如果您非常小心地保持代码在python中的有效性,您可以使用
eval
:
eval(yourlongstring)
您可能确实想使用Pickle:
它还可以将值作为字符串返回,而不是写入文件。这是实际的数据格式吗?你有弹性吗 它非常接近JSON,这是一种标准的数据格式,Python有用于读取和写入(序列化和反序列化)的本机库。但是,要使其成为有效的JSON,键和值都需要用引号括起来:
"cset" : "x",
"b1" : "y"
等等。不要使用
eval
。如果确定字符串始终包含有效的Pythondict
,请使用ast.literal\u eval
。这与eval
非常相似,但它只计算表达式是否为有效的dict
、list
等,如果不是,则抛出异常。这比试图在运行时计算可能包含任意代码的字符串更安全
从:
安全地计算表达式节点或
包含Python的字符串
表情。字符串或节点
所提供的信息可能仅包括以下内容:
以下Python文本结构:
字符串、数字、元组、列表、,
口授、布尔语和无语
这可用于安全评估
包含Python表达式的字符串
来自不受信任的来源,但没有
需要自己解析这些值
代码示例:
>>> import ast
>>> ast.literal_eval("1+1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/ast.py", line 68, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python2.6/ast.py", line 67, in _convert
raise ValueError('malformed string')
ValueError: malformed string
>>> ast.literal_eval("\"1+1\"")
'1+1'
>>> ast.literal_eval("{'a': 2, 'b': 3, 3:'xyz'}")
{'a': 2, 3: 'xyz', 'b': 3}
导入ast
>>>最后文字评估(“1+1”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.6/ast.py”,第68行,文本形式
返回\u转换(节点\u或字符串)
文件“/usr/lib/python2.6/ast.py”,第67行,in\u convert
raise VALUERROR('格式错误的字符串')
ValueError:格式不正确的字符串
>>>ast.literal\u eval(“\'1+1\”)
'1+1'
>>>ast.literal_eval(“{'a':2'b':3,3:'xyz'}”)
{'a':2,3'xyz','b':3}
如果可能,最好使用标准库!ast模块现在不是标准库的一部分吗?专业提示1:返回并接受您之前问题的答案,以避免看起来像个混蛋。(勾选在最能回答你问题的答案旁边)@Wayne:我这么做了,之前不知道,谢谢