我有一个字符串,它是 Python 字典的字符串化表示:
some_string = '{123: False, 456: True, 789: False}'
如何从上述字符串中获取Python字典?
我有一个字符串,它是 Python 字典的字符串化表示:
some_string = '{123: False, 456: True, 789: False}'
使用 ast.literal_eval
:
安全地计算表达式节点或包含Python表达式的字符串。提供的字符串或节点只能包含以下Python文字结构:字符串、数字、元组、列表、字典、布尔和None。
这可用于安全地计算来自不受信任来源的字符串,而无需自己解析值。
示例:
>>> some_string = '{123: False, 456: True, 789: False}'
>>> import ast
>>> ast.literal_eval(some_string)
{456: True, 123: False, 789: False}
好的,你可以这样做
d = eval(some_string)
但如果字符串包含用户输入,使用eval就不是一个好主意,因为一些恶意函数可能存在于表达式中。请参见Python 'eval'的安全性
因此,一个更安全的替代方案可能是:
import ast
d = ast.literal_eval(some_string)
从http://docs.python.org/library/ast.html#ast.literal_eval:
提供的字符串或节点只能由以下Python字面结构组成:字符串、数字、元组、列表、字典、布尔值和None。
唯一安全的方法是使用ast.literal_eval(它是安全的,因为与内置的eval
不同,"""提供的字符串或节点只能由以下Python文字结构组成:字符串、数字、元组、列表、字典、布尔值和None。""")。