本文摘自php中文网,作者尚,侵删。
比如字符串:
1
user_info =
'{"name" : "john", "gender" : "male", "age": 28}'
我们想把它转为下面的字典:
1
user_dict = {
"name"
:
"john"
,
"gender"
:
"male"
,
"age"
: 28}
有以下几种方法:
1、通过json来转
1
2
3
4
5
>>> import json
>>> user_info=
'{"name" : "john", "gender" : "male", "age": 28}'
>>> user_dict = json.loads(user_info)
>>> user_dict
{u
'gender'
: u
'male'
, u
'age'
: 28, u
'name'
: u
'john'
}
但是使用json进行转换存在一个潜在的问题。
由json语法规定数组或对象之中的字符串必须使用双引号,不能使用单引号 (官网上有一段描述是 “A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes” )。因此下面的转换是错误的:
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> import json
>>> user_info =
"{'name' : 'john', 'gender' : 'male', 'age': 28}"
# 由于字符串使用单引号,会导致运行出错
>>> user_dict = json.loads(user_info)
Traceback (most recent call last):
File
"<stdin>"
, line 1, in <module>
File
"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py"
, line 339, in loads
return
_default_decoder.decode(s)
File
"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py"
, line 364, in decode
obj,
end
= self.raw_decode(s, idx=_w(s, 0).
end
())
File
"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py"
, line 380, in raw_decode
obj,
end
= self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)
2、通过eval
1
2
3
4
5
6
7
8
>>> user_info =
'{"name" : "john", "gender" : "male", "age": 28}'
>>> user_dict =
eval
(user_info)
>>> user_dict
{
'gender'
:
'male'
,
'age'
: 28,
'name'
:
'john'
}
>>> user_info =
"{'name' : 'john', 'gender' : 'male', 'age': 28}"
>>> user_dict =
eval
(user_info)
>>> user_dict
{
'gender'
:
'male'
,
'age'
: 28,
'name'
:
'john'
}
通过eval进行转换就不存在上面使用json进行转换的问题。但是,使用eval却存在安全性的问题。
3、通过 literal_eval
1
2
3
4
5
6
7
8
9
>>> import ast
>>> user =
'{"name" : "john", "gender" : "male", "age": 28}'
>>> user_dict = ast.literal_eval(user)
>>> user_dict
{
'gender'
:
'male'
,
'age'
: 28,
'name'
:
'john'
}
user_info =
"{'name' : 'john', 'gender' : 'male', 'age': 28}"
>>> user_dict = ast.literal_eval(user)
>>> user_dict
{
'gender'
:
'male'
,
'age'
: 28,
'name'
:
'john'
}
使用ast.literal_eval进行转换既不存在使用json进行转换的问题,也不存在使用 eval 进行转换的 安全性问题,因此推荐使用ast.literal_eval。
更多Python相关技术文章,请访问Python教程栏目进行学习!
以上就是python怎么把字符串变成字典的详细内容,更多文章请关注木庄网络博客 !!
相关阅读 >>
Python 中base64加密解密操作方法及版本间差异
Python 中关于import与reload以及 __import__的区别详解
Python 中关于flask部署后并发测试的示例代码
Python 中怎么把列表转成字符串
浅析Python 数据处理
Python 打不开.py文件怎么办
在 flask 中集成 vue
Python 中eval和int的区别
Python 的简单的登陆和注册功能实现
Python 里break怎么用
更多相关阅读请进入《Python 》频道 >>
¥69.8元 人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python怎么把字符串变成字典