Python将字符串对象转换为字典

day*_*mer 2 python string dictionary

我一直在努力构建一个复杂的数据结构,它将返回一个字典.目前该类返回表单的字符串对象

{
   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>                         
                         ...  
                     }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想将整个字符串对象转换为字典.我在其中一篇文章中阅读了使用pickle模块,但我不想将其序列化为某个文件并使用它.

参考:http://bytes.com/topic/python/answers/36059-convert-dictionary-string-vice-versa

如果可能的话,我正在寻找一些其他更简洁的方法.

知道任何这样的方式会很棒.

MAK*_*MAK 8

不要用eval.如果您确定该字符串将始终包含有效的Python dict,请使用ast.literal_eval.这工作很像eval,但如果表达式是有效的,只计算dict,list等,如果不是抛出一个例外.这比尝试在运行时评估可能包含任意代码的字符串更安全.

来自文档:

安全地评估表达式节点或包含Python表达式的字符串.提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None.

这可以用于安全地评估包含来自不可信来源的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}
Run Code Online (Sandbox Code Playgroud)