Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将字符串对象转换为字典_Python_String_Dictionary - Fatal编程技术网

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
。如果确定字符串始终包含有效的Python
dict
,请使用
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:我这么做了,之前不知道,谢谢