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

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

我有一本字典,我想把每个值都转换成utf-8。这是可行的,但有"更多的Python"的方法吗?

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

我可以做的清单

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

但我不知道如何为字典做同样的事情。

这与Python字典理解不同,因为我不是从零开始创建字典,而是从现有的字典创建字典。链接问题的解决方案不显示如何循环遍历现有字典中的键/值对,以便将它们修改为新字典的新k/v对。下面的答案(已被接受)显示了如何做到这一点,并且对于有类似于我的任务的人来说,比链接相关问题的答案更清楚地阅读/理解,而链接相关问题的答案更复杂。


使用字典理解。看起来你是从字典开始的,所以:

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

字典理解的示例靠近链接中块的末尾。


由于我也遇到了这个问题,我构建了一个非常简单的函数,它允许任何dict以utf-8进行解码(当前答案的问题是它只适用于简单的dict)。

如果它能帮助任何人,那就太好了,功能如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)


这取决于您隐式编码到UTF-8的原因。如果是因为你在写一个文件,pythonic的方法是将字符串保留为unicode并在输出时编码:

1
2
3
4
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)


如果您想:

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


用ASCII字符转换非ASCII字典值的最佳方法是

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

以utf-8字符转换非utf-8字典值的最佳方法是

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

有关更多参考,请阅读python unicode文档