¿Cómo se divide una cadena para crear una lista anidada?

¿Cómo dividirías una cadena como

'1,55,6,89,2|7,29,44,5,8|767,822,999' 

en los dos delimitadores ',' y '|' de tal manera que tenga una lista con los valores como:

 [[1, 55, 6, 89, 2], [7, 29, 44, 5, 8], [767, 822, 999]] 

La comprensión de la lista es la forma más concisa de lograr esto.

 >>> s = '1,55,6,89,2|7,29,44,5,8|767,822,999' >>> [[int(x) for x in ss.split(',')] for ss in s.split('|')] [[1, 55, 6, 89, 2], [7, 29, 44, 5, 8], [767, 822, 999]] 
 my_data = [x.split(',') for x in input_string.split('|')] 
 my_data = [map(int, line.split(',')) for line in input_string.split('|')] 
 import re regx = re.compile('(\A)|(\|)|(\Z)') def repl(mat, di = {1:'[[', 2:'],[', 3:']]'} ): return di[mat.lastindex] ss = '1,55,6,89,2|7,29,44,5,8|767,822,999' my_data = eval( regx.sub(repl,ss) ) print my_data[1] print my_data[1][2] 

resultado

 [7, 29, 44, 5, 8] 44 

Lo sé: algunos gritarán para no usar eval ()

Editar

 ss = '1,55,6,89,2|7,29,44,5,8|767,822,999' my_data = eval( ss.replace('|','],[').join(('[[',']]')))