• Python3下字典、字符串及列表的相互转换


    今天我们学习Python中几种常见数据结构的相互转换:字符串(str)字典(dict)列表(list)

    字符串--列表

    字符串转列表

    • 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'}
    >>>
    
  • 相关阅读:
    ACM模板——次短路及K短路
    ACM模板——最小生成树
    Leetcode-743 Network Delay Time(网络延迟时间)
    ACM模板——最短路
    HDU-2037 今年暑假不AC
    Leetcode-1015 Numbers With Repeated Digits(至少有 1 位重复的数字)
    Leetcode-1014 Capacity To Ship Packages Within D Days(在 D 天内送达包裹的能力)
    Leetcode-1013 Pairs of Songs With Total Durations Divisible by 60(总持续时间可被 60 整除的歌曲)
    Leetcode-1012 Complement of Base 10 Integer(十进制整数的补码)
    LeetCode--204--计数质数
  • 原文地址:https://www.cnblogs.com/wintest/p/12543770.html
Copyright © 2020-2023  润新知