Подтвердить что ты не робот

В Python, как мне преобразовать список ints и строк в Unicode?

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!'].

4b9b3361

Ответ 1

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

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!']

Ответ 2

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

>>> 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!']

UPDATE: поскольку вы указали, что хотите, чтобы целые числа оставались как есть, я бы использовал следующее:

>>> 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(i, encoding='UTF-8')