将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字符串的列表的简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何解码一个unicode字符串Python [重复]

在Python 3.8.2中,如何将包含' uxxxx'序列的字符串转换为utf-8?

将包含混合字体的word文档转换为unicode

将列表 unicode 值的 rdd 列表转换为字符串

从 Unicode 字符串中正确提取表情符号

python3 将字符串unicode转换为中文