リストのテンプレートは次のとおりです。
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$']
変換後、EmployeeList.values()に「1001」が存在するかどうかを実際にチェックしています。
リスト内の各値を文字列にエンコードします。
_[x.encode('UTF8') for x in EmployeeList]
_
有効なエンコードを選択する必要があります。 str()
を使用しないでください。システムのデフォルト(Python 2のASCII))が使用され、Unicode値で可能なすべてのコードポイントがエンコードされません。
UTF-8はすべてのUnicode標準をエンコードできますが、ASCIIの範囲外のコードポイントは文字ごとに複数バイトになります。
ただし、特定の文字列をテストするだけの場合は、nicode文字列とPythonをテストするときにすべての値を自動エンコードする必要はありませんそのために:
_u'1001' in EmployeeList.values()
_
[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)
map
関数を使用できます
print map(str, EmployeeList)
このコードを使用するだけです
EmployeeList = eval(EmployeeList)
EmployeeList = [str(x) for x in EmployeeList]
どうですか:
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
これを行うにはいくつかの方法があります。このように変換しました
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
それがあなたを助けることを願っています。
ただ使う
unicode_to_list = list(EmployeeList)
これを行うには、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$']