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

8 投票
3 回答
11483 浏览
提问于 2025-04-16 04:17

我有一个字符串,它其实是一个被转换成字符串的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。

撰写回答