Легкий способ преобразования списка юникодов в список, содержащий строки python?
Шаблон списка:
EmployeeList = [u'<EmpId>', u'<Name>', u'<Doj>', u'<Salary>']
Я хотел бы конвертировать из этого
EmployeeList = [u'1001', u'Karick', u'14-12-2020', u'1$']
:
EmployeeList = ['1001', 'Karick', '14-12-2020', '1$']
После преобразования я действительно проверяю, существует ли "1001" в EmployeeList.values ().
Ответы
Ответ 1
Кодировать каждое значение в списке в строку:
[x.encode('UTF8') for x in EmployeeList]
Вам нужно выбрать допустимую кодировку; не используйте str()
, так как это будет использовать системный стандарт (для Python 2, который ASCII), который не будет кодировать все возможные кодовые точки в значении Unicode.
UTF-8 способен кодировать весь стандарт Unicode, но любой кодовый номер вне диапазона ASCII приведет к нескольким байтам на символ.
Однако, если все, что вы хотите сделать, это тест для определенной строки, проверьте строку unicode, и Python не будет автоматически кодировать все значения при тестировании для этого:
u'1001' in EmployeeList.values()
Ответ 2
[str(x) for x in EmployeeList]
выполнит преобразование, но оно не сработает, если символы строки unicode не лежат в диапазоне ascii.
>>> EmployeeList = [u'1001', u'Karick', u'14-12-2020', u'1$']
>>> [str(x) for x in EmployeeList]
['1001', 'Karick', '14-12-2020', '1$']
>>> EmployeeList = [u'1001', u'करिक', u'14-12-2020', u'1$']
>>> [str(x) for x in EmployeeList]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
Ответ 3
Мы можем использовать функцию map
print map(str, EmployeeList)
Ответ 4
Просто используйте этот код
EmployeeList = eval(EmployeeList)
EmployeeList = [str(x) for x in EmployeeList]
Ответ 5
как насчет:
def fix_unicode(data):
if isinstance(data, unicode):
return data.encode('utf-8')
elif isinstance(data, dict):
data = dict((fix_unicode(k), fix_unicode(data[k])) for k in data)
elif isinstance(data, list):
for i in xrange(0, len(data)):
data[i] = fix_unicode(data[i])
return data
Ответ 6
Просто используйте
unicode_to_list = list(EmployeeList)
Ответ 7
Есть несколько способов сделать это. Я преобразовал, как это
def clean(s):
s = s.replace("u'","")
return re.sub("[\[\]\'\s]", '', s)
EmployeeList = [clean(i) for i in str(EmployeeList).split(',')]
После этого вы можете проверить
if '1001' in EmployeeList:
#do something
Надеюсь, это поможет вам.
Ответ 8
Вы можете сделать это с помощью модулей json и ast следующим образом
>>> import json, ast
>>>
>>> EmployeeList = [u'1001', u'Karick', u'14-12-2020', u'1$']
>>>
>>> result_list = ast.literal_eval(json.dumps(EmployeeList))
>>> result_list
['1001', 'Karick', '14-12-2020', '1$']
Ответ 9
Просто json.dumps решит проблему
Функция json.dumps фактически конвертирует все литералы Юникода в строковые литералы, и нам будет легко загрузить данные либо в файл json, либо в файл csv.
Пример кода:
import json
EmployeeList = [u'1001', u'Karick', u'14-12-2020', u'1$']
result_list = json.dumps(EmployeeList)
print result_list
вывод: ["1001", "Карик", "14-12-2020", "1 $"]