如何将弦乐词典转换为Python词典?

时间:2010-09-17 18:21:14

标签: python

我有以下字符串,它是一个字典串化的Python字典:

some_string = '{123: False, 456: True, 789: False}'

如何从上面的字符串中获取Python字典?

3 个答案:

答案 0 :(得分:11)

使用ast.literal_eval

  

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

     

这可用于安全地评估包含来自不受信任来源的Python表达式的字符串,而无需自己解析值。

示例:

>>> some_string = '{123: False, 456: True, 789: False}'
>>> import ast
>>> ast.literal_eval(some_string)
{456: True, 123: False, 789: False}

答案 1 :(得分:8)

嗯,你可以做到

d = eval(some_string)

但是如果字符串包含用户输入,那么这是一个坏主意,因为一些随机恶意函数可能在表达式中。见Safety of Python 'eval' For List Deserialization

所以更安全的选择可能是:

import ast
d = ast.literal_eval(some_string)

来自http://docs.python.org/library/ast.html#ast.literal_eval

  

提供的字符串或节点可能只包含以下内容       Python文字结构:字符串,数字,元组,列表,dicts,布尔值,       没有。

答案 2 :(得分:3)

唯一的安全方法是使用ast.literal_eval(这是安全的,因为与内置eval不同,“”“提供的字符串或节点可能只是由以下Python文字结构组成:字符串,数字,元组,列表,dicts,布尔值和None。“”“。