我有一个类似于字符串的列表:
'[a:1,b:1,c:2,a:3]'
我想把它分成两个列表。
['a','b','c','d']
和[1,1,2,3]
是否有任何pythonic方法可以在不使用eval的情况下执行此操作(它无论如何都不起作用)?
答案 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)])