2010-05-25 5 views
2

Si j'ai une chaîne comme:découper une chaîne en une liste de tuples

"user1:type1,user2:type2,user3:type3" 

et je veux convertir en une liste de tuples comme ceci:

[('user1','type1'),('user2','type2'),('user3','type3')] 

comment pourrais-je aller à propos de faire ça? Je suis relativement nouveau sur python mais je n'ai pas trouvé de bon exemple dans la documentation pour le faire.

Merci!

+0

Il est drôle comment les trois réponses sont absolument identiques :) – Felix

+1

@felix « Il devrait y avoir One-- et de préférence qu'une seule façon --obvious de le faire. » --zen de python –

+0

** @ Jweede: ** Je pense que ** évident ** est le mot-clé là. Il y a ** toujours au moins deux ** manières de faire quelque chose :). ** Lawrence: ** Je vois que vous êtes nouveau à la pile ** débordement **. Vous devez accepter l'une des réponses en cliquant sur la coche située à gauche de la réponse, sous le «score» de la réponse. – Felix

Répondre

2

Utilisez la fonction split deux fois.

Essayez ceci pour un exemple:

s = "user1:type1,user2:type2,user3:type3" 
print [i.split(':') for i in s.split(',')] 
+0

-1 pour quelques raisons 1) n'utilisez pas 'str' comme nom de variable 2) cela ne fonctionnerait pas car le résultat du premier' split' est une liste –

+0

yep. corrigé dans les modifications. –

+0

N'utilisez pas non plus 'list' comme nom de variable. –

11
>>> s = "user1:type1,user2:type2,user3:type3" 
>>> [tuple(x.split(':')) for x in s.split(',')] 
[('user1', 'type1'), ('user2', 'type2'), ('user3', 'type3')] 
+1

parfait, merci! – Lawrence

+0

N'oubliez pas d'accepter la réponse! (Cochez-le.) –

4

La façon la plus propre est deux divisions avec une compréhension de la liste:

str = "user1:type1,user2:type2,user3:type3" 
res = [tuple(x.split(":")) for x in str.split(",")] 
3
>>> s = "user1:type1,user2:type2,user3:type3" 
>>> l = [tuple(user.split(":")) for user in s.split(",")] 
>>> l 
[('user1', 'type1'), ('user2', 'type2'), ('user3', 'type3')] 
>>> 

:)

3

Si vous voulez pour le faire sans boucles, vous pouvez utiliser map et lambda:

map(lambda x: tuple(x.split(":")), yourString.split(",")) 
Questions connexes