我有很多作为多级字典的输入,这些字典是通过JSON API调用解析出来的。字符串都是unicode格式,这意味着有很多像u'这样的东西'
。我正在使用jq来分析结果,并需要将这些结果转换为ASCII。
我知道我可以编写一个函数来进行直接转换:
def convert(input):
if isinstance(input, dict):
ret = {}
for stuff in input:
ret = convert(stuff)
elif isinstance(input, list):
ret = []
for i in range(len(input))
ret = convert(input[i])
elif isinstance(input, str):
ret = input.encode('ascii')
elif :
ret = input
return ret
这个算法是否正确?不确定。但我想问的不是这个。
我的问题是,这是一个典型的暴力解决方案。一定有更好的方法。一种更 Pythonic 的方式。我不是算法专家,但这个算法似乎也不是特别快。
那么有没有更好的方法?如果没有,这个函数能否被改进...?
回答后编辑
Mark Amery 的回答是正确的,但我想发布一个修改版本。他的函数适用于 Python 2.7+,而我使用的是2.6,因此必须进行转换:
def convert(input):
if isinstance(input, dict):
return dict((convert(key), convert(value)) for key, value in input.iteritems())
elif isinstance(input, list):
return [convert(element) for element in input]
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
return input
str
的实例,而是unicode
的实例。此外,在list
和dict
处理中,您的做法有误。 - agfret = [convert(x) for x in input]
替换if语句的分支。此外,请检查您的字典情况。ret
将仅包含字典中最后一个键转换的内容。 - Michael Miorinput
是一个字典,那么ret = [convert(x) for x in input]
显然不是我们想要的。 - Mark Amery