В Python, как мне преобразовать список целых и строк в Unicode? - PullRequest
13 голосов
/ 05 марта 2012
x = ['Some strings.', 1, 2, 3, 'More strings!', 'Fanc\xc3\xbf string!']
y = [i.decode('UTF-8') for i in x]

Как лучше всего преобразовать строки в x в Unicode?Сжатие списка приводит к ошибке атрибута (AttributeError: 'int' object has no attribute 'decode'), потому что у int нет метода декодирования.

Я мог бы использовать цикл for с попыткой?Или я мог бы сделать некоторую явную проверку типов при сжатии списка, но правильный ли подход - проверка типов в динамическом языке, таком как Python?

UPDATE:

Я бы предпочел, чтобы int оставался intХотя это не строгое требование.Мой идеальный выход был бы [u'Some strings.', 1, 2, 3, u'More strings!', u'Fancÿ string!'].

Ответы [ 2 ]

11 голосов
/ 05 марта 2012

Если вы хотите сохранить целые числа в том виде, в котором они есть в списке, при изменении строки на Unicode, вы можете сделать

x = ['Some strings.', 1, 2, 3, 'More strings!']
y = [i.decode('UTF-8') if isinstance(i, basestring) else i for i in x]

, который получает вас

[u'Some strings.', 1, 2, 3, u'More strings!']
11 голосов
/ 05 марта 2012

Вы можете использовать функцию Юникод :

>>> x = ['Some strings.', 1, 2, 3, 'More strings!']
>>> y = [unicode(i) for i in x]
>>> y
[u'Some strings.', u'1', u'2', u'3', u'More strings!']

ОБНОВЛЕНИЕ : поскольку вы указали, что хотите, чтобы целые числа оставались как есть, я бы использовалэто:

>>> y = [unicode(i) if isinstance(i, basestring) else i for i in x]
>>> y
[u'Some strings.', 1, 2, 3, u'More strings!']

Примечание: как указывает @Boldewyn, если вы хотите UTF-8, вы должны передать параметр encoding в функцию Unicode:

unicode(i, encoding='UTF-8')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...