将Unicode列表转换为包含Python字符串的列表的简单方法?
Posted
技术标签:
【中文标题】将Unicode列表转换为包含Python字符串的列表的简单方法?【英文标题】:Easy way to convert a unicode list to a list containing python strings? 【发布时间】:2013-08-18 18:52:24 【问题描述】:列表模板为:
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”。
【问题讨论】:
这个问题的正确答案取决于如果您的输入包含非 ASCII 字符,您希望发生什么。如果您希望您的输入全是 ASCII,那么让转换引发异常可以防止您将u'Kárick'
静默转换为K\xc3\xa1rick
(如果您不期望它肯定会导致下游问题)。
输入是动态的,有时可能包含非 ASCII 字符,试图找到处理 ASCII 和非 ASCII 输入的最佳解决方案。
为什么要这样做?只需检查u"1001"
。
为了放大@MarkTolonen,您的数据已经处于处理 Unicode 信息的最佳形式。与 C 类比,您可能想要获取int
的列表并将它们转换为short
,并且您可能大部分时间都很好。当你击中一个大于空头的基准时,你只是给自己买了一个错误。
是的,您可能对输出要求是正确的。但我不确定在 [u ] 中评估 uSearchString 是否是一种最佳方法。因此想到将 unicode 列表转换为包含字符串的列表以与 SearchString 进行比较
【参考方案1】:
将列表中的每个值编码为字符串:
[x.encode('UTF8') for x in EmployeeList]
您需要选择一个有效的编码;不要使用str()
,因为这将使用系统默认值(对于 Python 2,即 ASCII),它不会将所有可能的代码点编码为 Unicode 值。
UTF-8 能够编码所有 Unicode 标准,但任何超出 ASCII 范围的代码点都会导致每个字符有多个字节。
但是,如果您只想测试特定字符串,请测试 unicode 字符串,Python 在测试时不必自动编码所有值:
u'1001' in EmployeeList.values()
【讨论】:
鉴于 OP 在 cmets 中的要求澄清,这可能不再是最佳答案。 +/-0,因为当你写它时它是一个很好的答案。【参考方案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)
【讨论】:
在 Python 2.7 中不适用于 EmployeeList = [u'1001', u'करिक', u'14-12-2020', u'1$'] 工作得很好......谢谢【参考方案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 函数实际上将所有的 unicode 文字转换为字符串文字,我们可以轻松地将数据加载到 json 文件或 csv 文件中。
示例代码:
import json
EmployeeList = [u'1001', u'Karick', u'14-12-2020', u'1$']
result_list = json.dumps(EmployeeList)
print result_list
输出:["1001", "Karick", "14-12-2020", "1$"]
【讨论】:
以上是关于将Unicode列表转换为包含Python字符串的列表的简单方法?的主要内容,如果未能解决你的问题,请参考以下文章