Преобразование типов Python

Каков наилучший способ конвертировать int, long, double в строки и наоборот в python.

Я просматриваю список и передаю длинные слова в dict, который должен быть преобразован в строку Unicode.

I do

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

Почему некоторые из самых очевидных вещей настолько сложны?


person Dave    schedule 03.03.2010    source источник
comment
передача длинных слов в диктовку, которая должна быть преобразована в строку юникода? Как это очевидно? Чего пытаетесь вы добиться?   -  person S.Lott    schedule 04.03.2010
comment
В JAVA вы можете вызвать метод toString(), который, как вам может показаться, очевидно доступен в Python. И он существует в Python через метод str(). Только не на самом Объекте.   -  person Dave    schedule 04.03.2010
comment
не на самом Объекте. str( anything ) работает для всех существующих типов -- по определению. Для ваших собственных классов def __str__(self) подгоняйте то, что возвращается (это похоже на toString в Java). Какая у вас проблема? Можете ли вы предоставить код и образец вывода?   -  person S.Lott    schedule 04.03.2010


Ответы (3)


Вы можете сделать это так в Python 2.x:

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

или в Python 3.x:

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

Обратите внимание, что строки в Python 3 такие же, как строки Unicode в Python 2.

person AndiDog    schedule 03.03.2010
comment
То, как OP использует n[0], не похоже на ключ - person John La Rooy; 04.03.2010
comment
Этот сид хоть и рабочий, но очень трудно читаемый. Код читается больше, чем пишется, и поэтому вы должны использовать код из ответа Марка Байерса. - person Błażej Michalik; 09.06.2015

Чтобы преобразовать числовой тип в строку:

str(100)

Чтобы преобразовать строку в int:

int("100")

Чтобы преобразовать строку в число с плавающей запятой:

float("100")
person Mark Byers    schedule 03.03.2010
comment
Спасибо, нашел в документации. Но я очень ценю ваш ответ. - person Dave; 04.03.2010
comment
Это гораздо лучший ответ. Я не знаю, почему это не принятый ответ. - person Scott Tesler; 15.11.2013
comment
@ScottDavidTesler Я думаю, что я единственный, кто неоднократно говорил, что строки в SO;) - person swdev; 10.04.2014

Вы можете сделать это таким образом

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

Возможно, это понятнее, если есть только 2 или 3 ключа/значения.

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

Я думаю, что было бы лучше, если бы было более 3 ключей/значений

for n in l:
    dict(zip(('my_key','myother_key'),map(unicode,n)))
person John La Rooy    schedule 03.03.2010