簡體   English   中英

將每個字典值轉換為utf-8(詞典理解嗎?)

[英]Convert every dictionary value to utf-8 (dictionary comprehension?)

我有一本字典,我想將每個值都轉換為utf-8。 這可行,但是有“更pythonic”的方式嗎?

            for key in row.keys():
                row[key] = unicode(row[key]).encode("utf-8")

對於列表我可以做

[unicode(s).encode("utf-8") for s in row]

但我不確定如何對字典做同樣的事情。

這與Python字典理解不同,因為我不是從頭開始創建字典,而是從現有字典創建。 鏈接問題的解決方案沒有向我展示如何遍歷現有字典中的鍵/值對,以便將其修改為新字典的新k / v對。 下面的答案(已被接受)顯示了該方法的實現,並且與具有類似鏈接的相關問題的答案相比,對於具有類似於我的任務的某人,其閱讀/理解要清晰得多。

使用字典理解 看來您是從字典開始的,所以:

 mydict = {k: unicode(v).encode("utf-8") for k,v in mydict.iteritems()}

詞典理解的示例在鏈接中該塊的末尾附近。

因為我也遇到了這個問題,所以我構建了一個非常簡單的函數,該函數允許將任何dict用utf-8解碼(當前答案的問題是它僅適用於簡單dict)。

如果它可以幫助任何人,那就太好了,這里的功能是:

def utfy_dict(dic):
    if isinstance(dic,unicode):
        return(dic.encode("utf-8"))
    elif isinstance(dic,dict):
        for key in dic:
            dic[key] = utfy_dict(dic[key])
        return(dic)
    elif isinstance(dic,list):
        new_l = []
        for e in dic:
            new_l.append(utfy_dict(e))
        return(new_l)
    else:
        return(dic)

那個由That1Guy提供的答案的Python 3版本。

{k: str(v).encode("utf-8") for k,v in mydict.items()}

這取決於您為什么要隱式編碼為UTF-8。 如果是因為要寫入文件,則pythonic方法是將字符串保留為Unicode並在輸出中進行編碼:

with io.open("myfile.txt", "w", encoding="UTF-8") as my_file:
    for (key, values) in row.items():
        my_string = u"{key}: {value}".format(key=key, value=value)
        my_file.write(my_string)

如果您要執行以下操作,則可以僅遍歷鍵:

{x:unicode(a[x]).encode("utf-8") for x in a.keys()}

ascii字符轉換非ascii詞典值的最佳方法是

mydict = {k: unicode(v, errors='ignore').encode('ascii','ignore') for k,v in mydict.iteritems()} 

轉換UTF-8字符中的非UTF-8字典值的最佳方法是

mydict = {k: unicode(v, errors='ignore').encode('utf-8','ignore') for k,v in mydict.iteritems()}

有關更多參考,請閱讀python unicode文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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