我有以下字符串,它是一个字典串化的Python字典:
some_string = '{123: False, 456: True, 789: False}'
如何从上面的字符串中获取Python字典?
答案 0 :(得分:11)
安全地评估表达式节点或包含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。“”“。