2010-03-03 8 views
10

Quel est le meilleur moyen de convertir les int, long, double en chaînes et vice versa en python. Je suis en train de parcourir une liste et je passe à un dict qui devrait être transformé en chaîne unicode.Conversion de type Python

Je ne

for n in l: 
    {'my_key':n[0],'my_other_key':n[1]} 

Pourquoi certaines des choses les plus évidentes si compliqué?

+1

« en passant désire ardemment un dict qui devrait être transformé en une chaîne de caractères unicode »? Comment est-ce "évident"? Qu'est-ce que vous essayez d'accomplir? –

+0

En JAVA, vous pouvez appeler la méthode toString() que vous pourriez penser être évidemment disponible en Python. Et il existe en Python via la méthode str(). Juste pas sur l'objet lui-même. – Dave

+1

"pas sur l'objet lui-même". 'str (anything)' fonctionne pour chaque type, par définition. Pour vos propres classes, 'def __str __ (self)' pour adapter ce qui est retourné (c'est comme 'toString 'de Java) Quel problème avez-vous? Pouvez-vous fournir le code et la sortie de l'échantillon? –

Répondre

2

Vous pourriez le faire comme ceci dans Python 2.x:

>>> l = ((1,2),(3,4)) 
>>> dict(map(lambda n: (n[0], unicode(n[1])), l)) 
{1: u'2', 3: u'4'} 

ou 3.x Python:

>>> l = ((1,2),(3,4)) 
>>> {n[0] : str(n[1]) for n in l} 
{1: '2', 3: '4'} 

Notez que les chaînes en Python 3 sont les mêmes que les chaînes unicode en Python 2.

+0

La façon dont l'OP utilise n [0] ne ressemble pas à une clé –

+0

@gnibbler: Eh bien, c'est comme ça que j'ai compris son pseudocode. – AndiDog

+0

Vous avez bien compris, c'est une réponse correcte Merci! – Dave

37

Pour convertir un type numérique à une chaîne:

str(100) 

Pour convertir d'une chaîne à un entier:

int("100") 

Pour convertir d'une chaîne à un flotteur:

float("100") 
+0

Merci, je l'ai trouvé dans les docs. Mais j'apprécie beaucoup votre réponse. – Dave

+0

Votre réponse est également correcte – Dave

+0

C'est une bien meilleure réponse. Je ne sais pas pourquoi ce n'est pas la réponse acceptée. –

0

Vous pouvez le faire de cette façon

for n in l: 
    {'my_key':unicode(n[0]),'my_other_key':unicode(n[1])} 

Peut-être que ceci est plus clair s'il n'y a que 2 ou 3 touches/valeurs

for my_value, my_other_value in l: 
    {'my_key':unicode(my_value),'my_other_key':unicode(my_other_value)} 

Je pense que ce serait mieux s'il y a plus de 3 clés/valeurs

for n in l: 
    dict(zip(('my_key','myother_key'),map(unicode,n)))