2013-08-09 2 views
2

Каков наилучший способ преобразования каждой строки в список (содержащий другие списки) в unicode в python?конвертировать строки в отдельные списки в unicode - python

Например:

[['a','b'], ['c','d']] 

в

[[u'a', u'b'], [u'c', u'd']] 
+0

Ваш список специально всегда список списков строк, или гнездовой произвольно? –

+0

Есть две половины этого вопроса. Во-первых, есть «как преобразовать строку в Unicode». И если вы не думаете, что это реальный вопрос, вам обязательно нужно прочитать ответ Хорнера6. Во-вторых, есть: «Предполагаю, что я знаю, как я хочу преобразовать каждую строку в Юникод, как мне сопоставить ее через эту структуру данных». Если это единственная деталь, о которой вы просите, было бы яснее показать, как вы хотите преобразовать каждую строку. – abarnert

+0

@Peter DeGlopper: да, это всегда список списков строк – HappyPy

ответ

3
>>> li = [['a','b'], ['c','d']] 

>>> [[v.decode("UTF-8") for v in elem] for elem in li] 
[[u'a', u'b'], [u'c', u'd']] 
+0

Я думаю, что было бы лучше, прежде чем вы добавили «с функцией unicode()». Это почти всегда неправильно, и ваш первоначальный ответ был мертвым - простым и почти идеальным. – abarnert

+1

@abarnert. Не могли бы вы объяснить немного дальше? Есть ли разница между этими двумя? –

+0

Я понял, что конструктор unicode неявно декодируется. Мне любопытно узнать, есть ли разница. – Homer6

0

К сожалению, не существует простого ответа с юникода. Но, к счастью, как только вы это поймете, он понесет вас на другие языки программирования.

Это, безусловно, лучший ресурс, который я видел для питона Юникода:

http://nedbatchelder.com/text/unipain/unipain.html

С помощью клавиш со стрелками (на клавиатуре), чтобы перейти к следующему или предыдущему слайдам.

Также, пожалуйста, взгляните на это (и другие ссылки с конца этого слайд-шоу).

http://www.joelonsoftware.com/articles/Unicode.html

+0

Что делать, если строки являются «Windows-1252» закодированными байтовыми строками? Декодирование, предполагая, что они UTF-8 не поможет ему. Единственное, что поможет, - это фундаментальное понимание текстового кодирования, чтобы он мог управлять вводом и получать ожидаемый результат. – Homer6

+0

@PeterDeGlopper: Двое из вас только что сделали разные догадки, на которых половина этой проблемы является трудной частью, о которой OP (или должен был) спрашивать. Пока мы не получим разъяснений от ОП, вероятно, не так много споров. – abarnert

+0

Ну, в основном я просто хочу добавить букву «u» перед каждой строкой, чтобы я мог использовать неанглийские символы. Насколько мне известно, UTF-8 - это набор символов, который я должен использовать. – HappyPy

0
>>> l = [['a','b'], ['c','d']] 
>>> map(lambda x: map(unicode, x), l) 
[[u'a', u'b'], [u'c', u'd']] 
+0

Это плохая идея, если OP действительно не хочет декодировать с помощью 'sys.getdefaultencoding()'. И фиксация его для принятия кодирования означает либо лямбда внутри лямбды, либо частичное внутри лямбда; в любом случае, я думаю, что здесь гораздо проще использовать понимание. – abarnert

+0

Благодарим за разъяснения. Я оставлю его здесь, если OP захочет пойти с 'sys.getdefaultencoding()', и он выглядит красивым и понятным. – alecxe