将unicode列表转换为包含python字符串的列表的简单方法?
列表的模板为:将unicode列表转换为包含python字符串的列表的简单方法?,python,python-2.7,unicode,encoding,Python,Python 2.7,Unicode,Encoding,列表的模板为: EmployeeList = [u'<EmpId>', u'<Name>', u'<Doj>', u'<Salary>'] 为此: EmployeeList = ['1001', 'Karick', '14-12-2020', '1$'] 转换后,我实际上正在检查EmployeeList.values()中是否存在“1001”。[str(x)for x in EmployeeList]将进行转换,但如果unicode字符串字
EmployeeList = [u'<EmpId>', u'<Name>', u'<Doj>', u'<Salary>']
为此:
EmployeeList = ['1001', 'Karick', '14-12-2020', '1$']
转换后,我实际上正在检查EmployeeList.values()中是否存在“1001”。[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)
>>员工名单=[u'1001',u'Karick',u'14-12-2020',u'1$']
>>>[str(x)代表雇员名单中的x]
['1001','Karick','14-12-2020','1$']
>>>员工名单=[u'1001',u'करिक', u'14-12-2020',u'1$']
>>>[str(x)代表雇员名单中的x]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
UnicodeEncodeError:“ascii”编解码器无法对位置0-3中的字符进行编码:序号不在范围内(128)
将列表中的每个值编码为字符串:
[x.encode('UTF8') for x in EmployeeList]
您需要选择一个有效的编码;不要使用str()
UTF-8能够对所有Unicode标准进行编码,但是任何超出ASCII范围的代码点都会导致每个字符有多个字节
但是,如果您只想测试特定字符串,那么在测试unicode字符串时,Python不必自动编码所有值:
u'1001' in EmployeeList.values()
那么:
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
我们可以使用map
函数
print map(str, EmployeeList)
只要简单地使用这个代码
EmployeeList = eval(EmployeeList)
EmployeeList = [str(x) for x in EmployeeList]
只用
unicode_to_list = list(EmployeeList)
有几种方法可以做到这一点。我是这样转变的
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
希望它能对您有所帮助。您可以通过使用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$']
只要json.dumps就可以解决这个问题
实际上,json.dumps函数将所有unicode文本转换为字符串文本,我们可以轻松地在json文件或csv文件中加载数据
示例代码:
导入json
员工名单=[u'1001',u'Karick',u'14-12-2020',u'1$']
result_list=json.dumps(EmployeeList)
打印结果列表
输出:[“1001”、“Karick”、“14-12-2020”、“1$”]此问题的正确答案取决于您的输入包含非ASCII字符时希望发生的情况。如果您希望您的输入都是ASCII码,那么让转换抛出一个异常可以防止您将u'Kárick'
静默地转换为K\xc3\xa1rick
(如果您不期望,这肯定会导致下游出现问题)。输入是动态的,有时可能包含非ASCII字符,试图找到处理ASCII和非ASCII输入的最佳解决方案。为什么要这样做?只需检查u“1001”
。要放大@MarkTolonen,您的数据已经是处理Unicode信息的最佳形式。与C类似,您可能希望获取int
的列表,并将其转换为short
,这样您在大多数情况下都可以。当你碰到一个大于空头的数据时,你只是给自己买了一个bug。是的,也许你对输出要求是正确的。但我不确定在[u]中计算u{SearchString}是否是一种最佳方法。因此,考虑到将unicode列表转换为包含字符串的列表,以便与{{SearchString}}进行比较,鉴于OP在注释中对需求的澄清,这可能不再是最佳答案+/-0,因为您在编写时回答得很好。不适用于EmployeeList=[u'1001',u'करिक', Python 2.7中的u'14-12-2020',u'1$']运行良好…Thnaks
>>> 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$']