В 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!']
.
Ответы
Ответ 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')