【发布时间】:2010-09-17 18:21:14
【问题描述】:
我有以下字符串,它是一个 Python 字典字符串化:
some_string = '{123: False, 456: True, 789: False}'
如何从上述字符串中获取 Python 字典?
【问题讨论】:
标签: python
我有以下字符串,它是一个 Python 字典字符串化:
some_string = '{123: False, 456: True, 789: False}'
如何从上述字符串中获取 Python 字典?
【问题讨论】:
标签: python
安全地计算表达式节点或包含 Python 表达式的字符串。提供的字符串或节点只能由以下 Python 文字结构组成:字符串、数字、元组、列表、字典、布尔值和无。
这可用于安全地评估来自不受信任来源的包含 Python 表达式的字符串,而无需自己解析值。
例子:
>>> 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)
但如果字符串包含用户输入,这是一个坏主意,因为表达式中可能包含一些随机的恶意函数。见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 文字结构:字符串、数字、元组、列表、字典、布尔值、 和无。
【讨论】:
唯一的安全方法是使用ast.literal_eval(它是安全的,因为与内置eval不同,“”“提供的字符串或节点可能仅包含以下内容Python 文字结构:字符串、数字、元组、列表、字典、布尔值和无。"""。
【讨论】: