python--列表、字符串、字典、元组之间的转换


列表、字符串、字典、元组之间的转换

1. 列表与字符串的相互转换

列表转字符串

将列表中的元素用特定的符号连接成一个字符串:

In [1]: list1 = ['a','b','c']
In [2]: str1 = ''.join(list1)
In [3]: str1
Out[3]: 'abc'

例子中用空字符连接,也就是元素之间直接连接。也可以用别的字符,如“-”,如下所示:

In [4]: str1 = '-'.join(list1)
In [5]: str1
Out[5]: 'a-b-c'

不过,上述例子仅适用与列表中的元素都是字符串,如果列表中还包含数值等其他类型元素,可以增加一步将列表中的每个元素都转字符串,如下:

In [8]: list1 = ['a',7,'b',8,'c']
In [9]: list2 = [str(it) for it in list1]
In [10]: list2
Out[10]: ['a', '7', 'b', '8', 'c']

或者还有列表中包含列表元素:

In [11]: list1 = ['a',7,'b',8,'c',['e',9]]
In [12]: list2 = [str(it) for it in list1]
In [13]: list2
Out[13]: ['a', '7', 'b', '8', 'c', "['e', 9]"]

实际业务中可能会碰到一种情况,列表中包含字符串,数值和列表类型元素,需要脱去列表最外层的中括号,只得到列表中的内容。如列表为:[1, ‘a’, [‘b’]],需要得到的结果为:1, ‘a’, [‘b’]。这样我们可以先将列表中强制转字符串,然后截取字符串,如下:

In [14]: list1 = ['a',7,'b',8,'c',['e',9]]
In [15]: str1 = str(list1)
In [16]: str1
Out[16]: "['a', 7, 'b', 8, 'c', ['e', 9]]"
In [17]: str2 = str1[1:-1]
In [18]: str2
Out[18]: "'a', 7, 'b', 8, 'c', ['e', 9]"

这样在print()或者写入到txt文件的实际都不会看到外层的双引号了。

字符串转列表

如果字符串中没有额外的分隔符,可直接用list转换:

In [23]: str1 = 'aabbcc'
In [24]: list1 = list(str1)
In [25]: list1
Out[25]: ['a', 'a', 'b', 'b', 'c', 'c']

若字符串中同样的分隔符重复出现,则用分割法返回列表:

In [26]: str1 = 'aa,bb,cc'
In [27]: list1 = str1.split(',')
In [28]: list1
Out[28]: ['aa', 'bb', 'cc']

若字符串中是列表的形式,可获取字符串内容,从而得到列表:

In [30]: str1 = "['a', 'a', 'b', 'b', 'c', 'c']"
In [31]: list1 = eval(str1)
In [32]: list1
Out[32]: ['a', 'a', 'b', 'b', 'c', 'c']

2. 列表与字典的相互转换

列表转字典

两个列表转字典

两个列表一一对应,分别表示key和value,如下:

In [33]: key1 = ['1','2','3']
In [34]: val1 = ['a','b','c']
In [35]: dic1 = dict(zip(key1,val1))
In [36]: dic1
Out[36]: {'1': 'a', '2': 'b', '3': 'c'}

In [37]: zip(key1,val1)
Out[37]: <zip at 0x215aee8ab88>
In [39]: list(zip(key1,val1))
Out[39]: [('1', 'a'), ('2', 'b'), ('3', 'c')]

zip函数其实就是将两个列表一一对应的元素放到一起,结果为[(‘1’, ‘a’), (‘2’ ,‘b’), (‘3’, ‘c’)],python3为了节省内存压缩成一个对象,通过list转换可以看到实际的结果。

嵌套列表转字典

列表中的元素均为列表,其中的每一个列表都是一对key-value。

In [40]: list1 = [['1','a'], ['2','b'], ['3','c']]
In [41]: dic1 = dict(list1)
In [42]: dic1
Out[42]: {'1': 'a', '2': 'b', '3': 'c'}

字典转列表

In [43]: dic1 = {'1': 'a', '2': 'b', '3': 'c'}
In [44]: list(dic1)
Out[44]: ['1', '2', '3']
In [45]: list(dic1.keys())
Out[45]: ['1', '2', '3']
In [46]: list(dic1.values())
Out[46]: ['a', 'b', 'c']

In [47]: dic1.keys()
Out[47]: dict_keys(['1', '2', '3'])
In [48]: dic1.values()
Out[48]: dict_values(['a', 'b', 'c'])

例子中我们看到,字典直接转list只能将其中的key提取出来形成一个列表。字典中的关键字和值需要分别获取然后转列表。

3. 字典与字符串的相互转换

字符串转字典

字符串内容是字典,则用eval获取字符串内容:

In [49]: str2 = "{'1': 'a', '2': 'b', '3': 'c'}"
In [50]: eval(str2)
Out[50]: {'1': 'a', '2': 'b', '3': 'c'}

还有一种方法是用json包中的函数,将json格式字符串转为字典。json格式字符串要求内容中的字符串必须用双引号,具体的json格式可自行百度。

In [53]: import json
In [54]: str2 = '{"a":1,"b":2}'
In [55]: json.loads(str2)
Out[55]: {'a': 1, 'b': 2}

字典转字符串

str强制转换:

In [56]: dic = {'1': 'a', '2': 'b', '3': 'c'}
In [57]: str(dic)
Out[57]: "{'1': 'a', '2': 'b', '3': 'c'}"

json.dumps转换:

In [56]: dic = {'1': 'a', '2': 'b', '3': 'c'}
In [58]: json.dumps(dic)
Out[58]: '{"1": "a", "2": "b", "3": "c"}'

4. 元组与字符串的相互转换

元组转字符串

使用str强制转换:

In [72]: tup1 = ('a','b','c')
In [73]: str(tup1)
Out[73]: "('a', 'b', 'c')"

用字符分割:

In [74]: ''.join(tup1)
Out[74]: 'abc'

字符串转元组

直接用tuple强制转:

In [75]: str1 = 'abc'
In [76]: tuple(str1)
Out[76]: ('a', 'b', 'c')

字符串整体不切割转元组的方法参考:字符串转元组

字符串中包含元组,用eval获取字符串

In [77]: str1 = "('a', 'b', 'c')"
In [78]: tup1 = eval(str1)
In [79]: tup1
Out[79]: ('a', 'b', 'c')

5. 元组与列表的相互转换

元组转列表

In [81]: tup1 = ('a', 'b', 'c')
In [82]: list(tup1)
Out[82]: ['a', 'b', 'c']

列表转元组

In [83]: list1 = ['a', 'b', 'c']
In [84]: tuple(list1)
Out[84]: ('a', 'b', 'c')

6. 元组与字典的相互转换

元组转字典

类似列表转字典,用zip函数过渡,之后用dict转换:

In [66]: tup1 = ('a','b','c')
In [67]: tup2 = (1,2,3)
In [68]: dict(zip(tup1,tup2))
Out[68]: {'a': 1, 'b': 2, 'c': 3}

字典转元组

字典的key和value分别用tuple转为元组:

In [69]: dic = {'a': 1, 'b': 2, 'c': 3}
In [70]: tuple(dic.keys())
Out[70]: ('a', 'b', 'c')
In [71]: tuple(dic.values())
Out[71]: (1, 2, 3)

参考文献:

https://www.cnblogs.com/who-care/p/9306800.html

https://www.runoob.com/python/python-func-zip.html

https://www.jb51.net/article/152933.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值