如何将一个字符串字典转换为Python字典?

7

我有一个字符串,它是 Python 字典的字符串化表示:

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

如何从上述字符串中获取Python字典?
3个回答

12

使用 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}

10

好的,你可以这样做

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。


3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接