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文档