Here's what I'd do:
>>> import re
>>> s = '6M1I69M1D34M'
>>> matches = re.findall(r'(\d+)([A-Z]{1})', s)
>>> import pprint
>>> pprint.pprint([{'type':m[1], 'length':int(m[0])} for m in matches])
[{'length': 6, 'type': 'M'},
{'length': 1, 'type': 'I'},
{'length': 69, 'type': 'M'},
{'length': 1, 'type': 'D'},
{'length': 34, 'type': 'M'}]
It's pretty similar to what you have, but it uses regex groups to tease out the individual components of the match.