将每个字典值转换为 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()}
我有一本字典,我想将每个值都转换为 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()}