Une seule ligne qui fonctionnerait pour votre exemple précis:
>>> string = "['SING', 'Dance'],['Talk', 'Scream'],['Run', 'Walk']"
>>> [x.split(', ') for x in string[1:-1].replace("'", "").split('],[')]
[['SING', 'Dance'], ['Talk', 'Scream'], ['Run', 'Walk']]
Ceci est fragile, car cela dépend des chaînes de travail exactement comme vous avez les ont disposés. Il applique les étapes suivantes:
string[1:-1]
- jeter le [
et ]
cette tranche de la chaîne.
replace("'")
- rejette toutes les guillemets simples car elles n'aideront pas la scission.
split('],[')
- divisez la chaîne la plus externe de la sous-chaîne qui relie les sous-listes.
[x.split(', ')
pour x dans ... - FOR EACH GENERATED SUBSTRING, split that substring on its internal pair connector - in this case
, `.
Ceci est plus une preuve de concept que cela peut être fait, plutôt qu'une très bonne idée. C'est une solution très fragile, car toute irrégularité dans l'espacement ou la citation va la casser.
Une meilleure solution serait d'utiliser une expression régulière pour trouver les sous-chaînes qui correspondent à des listes, obtenir une liste de ceux et celles processus dans des listes.
regex_string = '(?<=\[)[^\]]+(?=\])'
matcher = re.compile(regex_string)
substring_list = matcher.findall(string)
list_of_lists = [x.split(', ') for x in substring_list]
Wh at est votre but éventuel? –
'ast.literal_eval ('[' + chaîne + ']')'? – Blender
Vous pourriez diviser sur '], [' .. –