I have a string as below ,
val = '["10249/54","10249/147","10249/187","10249/252","10249/336"]'
I need to parse it and take the values after / and put into list as below
['54','147','187','252','336']
My code: [a[a.index('/')+1:] for a in val[1:-1].split(',')]
Output : ['54"', '147"', '187"', '252"', '336"']
It has double quotes also " which is wrong. After i tried as below
c = []
for a in val[1:-1].split(','):
tmp = a[1:-1]
c.append(tmp[tmp.index('/')+1:])
Output :
['54', '147', '187', '252', '336']
Is there any better way to do this?
You can do it in one line using literal_eval
:
from ast import literal_eval
val = ['54','147','187','252','336']
a = [i.split('/')[-1] for i in literal_eval(val)]
print(a)
Output:
['54', '147', '187', '252', '336']
literal_eval()
converts your string into a list, and then i.split('/')[-1]
grabs what's after the slash.
Yeah ... assuming every value has a /
like your example, this is superior:
>>> from ast import literal_eval
>>>
>>> val = '["10249/54","10249/147","10249/187","10249/252","10249/336"]'
>>> [int(i.split('/')[1]) for i in literal_eval(val)]
[54, 147, 187, 252, 336]
*edited to insert a forgotten bracket
Try using regular expressions!
You can do it in a single line this way.
import re
val = '["10249/54","10249/147","10249/187","10249/252","10249/336"]'
output = re.findall('/(\d+)', val) # returns a list of all strings that match the pattern
print(output)
Result:
['54', '147', '187', '252', '336']
re.findall
generates a new list called with all the matches of the regexp. Check out the docs on regular expressions for more info on this topic.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With