将每个字典值转换为 utf-8(字典理解?)

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

我有一本字典,我想将每个值都转换为 utf-8。这行得通,但是有 "more pythonic" 方法吗?

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

对于我可以做的清单

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

但我不确定如何为字典做同样的事情。

这与 Python Dictionary Comprehension 不同,因为我不是要从头开始创建字典,而是要从现有字典创建字典。链接问题的解决方案没有告诉我如何遍历现有词典中的 key/value 对,以便将它们修改为新词典的新 k/v 对。下面的答案(已被接受)显示了如何做到这一点,并且对于任务与我类似的人来说比链接相关问题的答案更复杂 read/understand 更清楚。

使用 dictionary comprehension。看起来您是从字典开始的,所以:

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

字典推导式的示例接近 link 中块的末尾。

如果需要,您可以只遍历键:

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

这取决于您隐式编码为 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)

非 ascii 字典值转换为 ascii 字符的最佳方法是

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

non-utf-8 字典值转换为 utf-8 字符的最佳方法是

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

更多参考请阅读python unicode documentation

因为我也有这个问题,所以我构建了一个非常简单的函数,允许以 utf-8 解码任何字典(当前答案的问题是它仅适用于简单字典)。

如果它可以帮助任何人,那就太好了,这是功能:

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)

Python 3 个版本基于 That1Guy 的那个答案。

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