Vorlage der Liste ist:
EmployeeList = [u'<EmpId>', u'<Name>', u'<Doj>', u'<Salary>']
Ich möchte davon konvertieren
EmployeeList = [u'1001', u'Karick', u'14-12-2020', u'1$']
zu diesem:
EmployeeList = ['1001', 'Karick', '14-12-2020', '1$']
Nach der Konvertierung überprüfe ich tatsächlich, ob "1001" in EmployeeList.values () vorhanden ist.
Kodieren Sie jeden Wert in der Liste in eine Zeichenfolge:
[x.encode('UTF8') for x in EmployeeList]
Sie müssen eine gültige Kodierung auswählen. Verwenden Sie nicht str()
, da dies den Systemstandard verwendet (für Python 2 ASCII), der nicht alle möglichen Codepunkte in einem Unicode-Wert codiert.
UTF-8 kann den gesamten Unicode-Standard kodieren, jeder Codepunkt außerhalb des Bereichs ASCII führt jedoch zu mehreren Bytes pro Zeichen.
Wenn Sie jedoch nur einen bestimmten String testen möchten, testen Sie einen Unicode String, und Python muss nicht alle Werte automatisch codieren, wenn Sie dies testen:
u'1001' in EmployeeList.values()
[str(x) for x in EmployeeList]
führt eine Konvertierung durch, die jedoch fehlschlägt, wenn die Unicode-Zeichenfolgen nicht im ASCII-Bereich liegen.
>>> 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)
Wir können die Funktion map
verwenden
print map(str, EmployeeList)
wie wäre es mit:
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
Verwenden Sie einfach diesen Code
EmployeeList = eval(EmployeeList)
EmployeeList = [str(x) for x in EmployeeList]
Dafür gibt es mehrere Möglichkeiten. Ich habe mich so bekehrt
def clean(s):
s = s.replace("u'","")
return re.sub("[\[\]\'\s]", '', s)
EmployeeList = [clean(i) for i in str(EmployeeList).split(',')]
Danach können Sie überprüfen
if '1001' in EmployeeList:
#do something
Ich hoffe es wird dir helfen.
Benutz einfach
unicode_to_list = list(EmployeeList)
Verwenden Sie dazu die Module json und ast wie folgt
>>> 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$']