字符串化列表到两个单独的列表

时间:2015-08-13 10:48:21

标签: python list

我有一个类似于字符串的列表:

'[a:1,b:1,c:2,a:3]'

我想把它分成两个列表。

['a','b','c','d'][1,1,2,3]

是否有任何pythonic方法可以在不使用eval的情况下执行此操作(它无论如何都不起作用)?

3 个答案:

答案 0 :(得分:3)

您可以使用re.findall()查找字符和数字,并使用zip功能将其分开:

>>> a='[a:1,b:1,c:2,a:3]'

>>> import re
>>> zip(*re.findall(r'([a-z]):(\d)',a))
[('a', 'b', 'c', 'a'), ('1', '1', '2', '3')]

答案 1 :(得分:2)

import re
zip(*re.findall(r'([a-z]):([0-9])', my_string))

根据您的使用情况,您还可以添加一些+

>>> zip(*re.findall(r'([a-z]+):([0-9]+)', '[a:1,blabla:1,c:20,a:3]'))
[('a', 'blabla', 'c', 'a'), ('1', '1', '20', '3')]

答案 2 :(得分:1)

进一步要求得到一个整体列表:

str = '[a:1,b:1,c:2,a:3]'
p,q = zip(*[(x,int(y)) for x,y in re.findall('([a-z]+):(\d+)', str)])