簡體   English   中英

Python-如果項目是字符串,則將列表項目轉換為unicode

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM