it-swarm.com.ru

Простой способ конвертировать список Unicode в список, содержащий строки 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 ​​().

29
Karthick

Кодируйте каждое значение в списке в строку:

[x.encode('UTF8') for x in EmployeeList]

Вам нужно выбрать правильную кодировку; не используйте str(), так как при этом будет использоваться системное значение по умолчанию (для Python 2 это ASCII), которое не будет кодировать все возможные кодовые точки в значении Unicode.

UTF-8 способен кодировать весь стандарт Unicode, но любая кодовая точка вне диапазона ASCII приведет к множеству байтов на символ.

Однако, если все, что вы хотите сделать, это проверить на определенную строку, проверьте на unicode string и Python не должен будет автоматически кодировать все значения при тестировании для этого:

u'1001' in EmployeeList.values()
48
Martijn Pieters

[str(x) for x in EmployeeList] будет выполнять преобразование, но оно не будет выполнено, если строковые символы Юникода не лежат в диапазоне 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)
18
DhruvPathak

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

print map(str, EmployeeList)
12
Mani

как насчет:

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
4
le_vine

Просто используйте этот код

EmployeeList = eval(EmployeeList)
EmployeeList = [str(x) for x in EmployeeList]
4
Umar Asghar

Есть несколько способов сделать это. Я преобразовал, как это

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

Надеюсь, это поможет вам.

0
SHIVAPUTRA UDAGATTI

Просто используйте 

unicode_to_list = list(EmployeeList)
0
Manish Yadav

Вы можете сделать это с помощью модулей 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$']
0
Gopikrishna