如何将字符串字典转换为Python字典?
我有一个字符串,它其实是一个被转换成字符串的Python字典:
some_string = '{123: False, 456: True, 789: False}'
我该怎么从这个字符串中提取出Python字典呢?
3 个回答
3
唯一“安全”的方法是使用 ast.literal_eval。之所以说它安全,是因为和内置的 eval
不同,使用这个方法时,输入的字符串或节点只能包含以下这些Python的基本数据结构:字符串、数字、元组、列表、字典、布尔值和None。
13
使用 ast.literal_eval
:
这个方法可以安全地评估一个表达式节点或者一个包含Python表达式的字符串。你提供的字符串或节点只能包含以下几种Python的基本数据结构:字符串、数字、元组、列表、字典、布尔值和None。
这样做的好处是,可以安全地评估来自不可信来源的包含Python表达式的字符串,而不需要自己去解析这些值。
示例:
>>> some_string = '{123: False, 456: True, 789: False}'
>>> import ast
>>> ast.literal_eval(some_string)
{456: True, 123: False, 789: False}
10
好吧,你可以这样做:
d = eval(some_string)
但是如果这个字符串里包含用户输入,那就不太安全了,因为里面可能会有一些恶意的代码。你可以看看这个链接了解更多:Python 'eval' 在列表反序列化中的安全性
所以一个更安全的选择可能是:
import ast
d = ast.literal_eval(some_string)
来自 http://docs.python.org/library/ast.html#ast.literal_eval 的说明:
提供的字符串或节点只能包含以下这些Python字面量结构:字符串、数字、元组、列表、字典、布尔值和None。