我有一个可以混合 str 和 unicode 字符串的列表:
lst = ['string1', u'string2', 'string3', u'string4']
如果项目是 str,我需要将每个列表项目转换为 unicode。要将 str 转换为 unicode,我使用:
s = s.decode('utf-8')
问题是,如果字符串已经是 unicode 并且包含非 ascii 字符,如果我尝试解码它,我会得到 UnicodeEncodeError: 'ascii' codec can't encode character ...
所以我想是这样的:
lst = [i.decode('utf-8') for i in lst if isinstance(i, str)]
但这实际上从列表中删除了 unicode 字符串。
请您参考如下方法:
你在过滤(去除不匹配的元素);你需要使用 conditional expression相反:
lst = [i.decode('utf-8') if isinstance(i, str) else i for i in lst]
<true> if <condition> else <false>这里的表达式总是产生一个输出。这是解码后的字符串,如果不是 str,则为未更改的原始对象。对象。
