[英]Python - Convert list item into unicode if item is string
我有一個可以混合使用str和unicode字符串的列表:
lst = ['string1', u'string2', 'string3', u'string4']
如果項目是一個str,我需要轉換unicode中的每個列表項目。 要將str轉換為unicode,請使用:
s = s.decode('utf-8')
問題是,如果字符串已經是unicode並且包含非ASCII字符,如果我嘗試對其進行解碼,則會得到UnicodeEncodeError:'ascii'編解碼器無法對字符進行編碼...
所以我想:
lst = [i.decode('utf-8') for i in lst if isinstance(i, str)]
但這實際上從列表中刪除了unicode字符串。
嘗試這個:
lst = [i.decode('utf-8') if isinstance(i, str) else i for i in lst ]
您正在過濾(刪除不匹配的元素); 您需要使用條件表達式 :
lst = [i.decode('utf-8') if isinstance(i, str) else i for i in lst]
此處的<true> if <condition> else <false>
表達式始終產生輸出。 這是解碼后的字符串,如果不是str
對象,則原始對象不變。
雖然您可以在列表理解中使用三元表達式來正確地轉換元素,但我認為將邏輯提取到單獨的輔助函數中會更干凈:
def convert_to_unicode(s):
"""
convert `s` to unicode. If `s` is already
unicode, return `s` as is.
"""
if isinstance(s, str):
return s.decode('utf-8')
else:
return s
然后,您可以簡單地在列表的每個元素上調用該函數:
lst = [convert_to_unicode(i) for i in lst]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.