Python3下字典、字符串及列表的相互转换
字符串转列表
1.使用内置函数 list()
>>> str1 = "abcdefg" >>> list1 = list(str1) >>> print(list1) ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>>
2.使用内置函数 eval()
>>> str2 = "['aaa', 'bbb', 'ccc', 'ddd']" >>> list2 = eval(str2) >>> print(type(list2)) <class 'list'> >>> print(list2) ['aaa', 'bbb', 'ccc', 'ddd'] >>>
3.使用内置模块 json.loads()
方法
# str3 = "['aaa', 'bbb', 'ccc', 'ddd']" # 因为 json.loads() 是将json格式字符串转换为python对象,而按 json 的标准规范应该使用双引号,如果使用单引号会导致报错 >>> str3 = '["aaa", "bbb", "ccc", "ddd"]' >>> import json >>> list3 = json.loads(str3) >>> print(type(list3)) <class 'list'> >>> print(list3) ['aaa', 'bbb', 'ccc', 'ddd'] >>>
4.使用 split()
进行分割
>>> str4 = "username=admin&passsword=123456" >>> list4 = str4.split("&") >>> print(type(list4)) <class 'list'> >>> print(list4) ['username=admin', 'passsword=123456'] >>>
如果我们要对多个字符进行分割,那么可以使用内置模块 re.split()
方法。
>>> str5 = "username=admin&passsword=123456" >>> import re >>> list5 = re.split("&|=", str5) >>> print(type(list5)) <class 'list'> >>> print(list5) ['username', 'admin', 'passsword', '123456'] >>>
===============
列表转字符串
1.使用内置函数 str()
# 注意,转换之后,双引号会变为单引号 >>> list1 = ["aaa", 123, 'ccc', True] >>> str1 = str(list1) >>> print(type(str1)) <class 'str'> >>> print(str1) ['aaa', 123, 'ccc', True] >>>
上面直接使用 str()
,是将整个列表转换为字符串,如果我们不想改变列表的类型,只是要将列表中所有元素转为字符串,那么可以借助列表推导式来实现。
# 注意,转换之后,双引号会变为单引号 >>> list1 = ["aaa", 123, 'ccc', True] >>> str2 = [str(i) for i in list2] >>> print(type(str2)) <class 'list'> >>> print(str2) ['aaa', '123', 'ccc', 'True'] >>>
2.使用 join()
进行拼接
>>> list3 = ['username=admin', 'passsword=123456'] >>> str3 = "&".join(list3) >>> print(type(str3)) <class 'str'> >>> print(str3) username=admin&passsword=123456 >>>
3.使用内置模块 json.dumps()
方法
# 这里列表中使用了单引号 >>> list4 = ['username=admin', 'passsword=123456'] >>> import json >>> str4 = json.dumps(list4) >>> print(type(str4)) <class 'str'> >>> print(str4) ["username=admin", "passsword=123456"] >>>
需要注意的是,按 json
的标准规范是使用双引号 ""
,因此在转换之后得到的json字符串是双引号的。
===============
字符串转字典
1.使用内置函数 eval()
>>> str1 = "{'username':'admin', 'password':123456}" >>> dict1 = eval(str1) >>> print(type(dict1)) <class 'dict'> >>> print(dict1) {'username': 'admin', 'password': 123456} >>>
2.使用内置模块 json.loads()
方法
# str1 = "{'username':'admin', 'password':123456}" # 因为 json.loads() 是将json格式字符串转换为python对象,而按 json 的标准规范应该使用双引号,如果使用单引号会导致报错 >>> str2 = '{"username":"admin", "password":123456}' >>> import json >>> dict2 = json.loads(str2) >>> print(type(dict2)) <class 'dict'> >>> print(dict2) {'username': 'admin', 'password': 123456} >>>
3.使用内置模块 ast.literal_eval()
方法
>>> str3 = "{'username':'admin', 'password':123456}" >>> import ast >>> dict3 = ast.literal_eval(str3) >>> print(type(dict3)) <class 'dict'> >>> print(dict3) {'username': 'admin', 'password': 123456} >>>
我们发现,Python中已经有了内置函数 eval()
,但现在却又出现个类似的 ast.literal_eval()
方法,二者的区别是什么呢?
这里主要是出于安全性的考虑,因为 ast.literal_eval()
会判断计算后的结果是不是合法的python类型,如果是则进行运算,否则就不进行运算,而 eval()
则不会管这些,即使字符串是一个命令,它也会进行解析。
因此,相比 eval()
函数, ast.literal_eval()
更加安全,更被 推荐使用 。
===============
字典转字符串
1.使用内置函数
str()
>>> dict1 = {'username': 'admin', 'password': 123456} >>> str1 = str(dict1) >>> print(type(str1)) <class 'str'> >>> print(str1) {'username': 'admin', 'password': 123456} >>>
2.使用内置模块 json.dumps()
方法
>>> dict2 = {'username': 'admin', 'password': 123456} >>> import json >>> str2 = json.dumps(dict2) >>> print(type(str2)) <class 'str'> >>> print(str2) {"username": "admin", "password": 123456} >>>
需要注意的是,按 json
的标准规范是使用双引号 ""
,因此在转换之后得到的json字符串是双引号的。
如果我们想让得到的字符串仍保持单引号,可以通过 replace()
方法来简单处理一下。
>>> dict3 = {'username': 'admin', 'password': 123456} >>> import json >>> str3 = json.dumps(dict3).replace("\"", "'") >>> print(type(str3)) <class 'str'> >>> print(str3) {'username': 'admin', 'password': 123456} >>>
===============
字典转列表
1.使用内置函数
list()
>>> dict1 = {"a": 1, "b": "2", "c": True} >>> list1 = list(dict1.keys()) >>> print(list1) ['a', 'b', 'c'] >>> list2 = list(dict1.values()) >>> print(list2) [1, '2', True] >>>
列表转字典
1.使用内置函数
dict()
,将嵌套列表转换为字典
>>> list3 = [['a', 1], ['b', '2'], ['c', True]] >>> dict2 = dict(list3) >>> print(type(dict2)) <class 'dict'> >>> print(dict2) {'a': 1, 'b': '2', 'c': True} >>>
2.使用内置函数 zip()
,将2个列表转换为字典
>>> list1 = ["a", 'b', "c", 'd', "f"] >>> list2 = ["1", '2', "3", '4', "5"] >>> dict1 = dict(zip(list1,list2)) >>> print(type(dict1)) <class 'dict'> >>> print(dict1) {'a': '1', 'b': '2', 'c': '3', 'd': '4', 'f': '5'} >>>
如果2个列表的长度不一样时,那么就不展示多出来的元素。
>>> list1 = ["a", 'b', "c"] >>> list2 = ["1", '2', "3", '4', "5"] >>> dict1 = dict(zip(list1,list2)) >>> print(type(dict1)) <class 'dict'> >>> print(dict1) {'a': '1', 'b': '2', 'c': '3'} >>>