使用python3.5,我在排序JSON时遇到了TypeError
。该函数可以在StackOverflow上找到,并对有效JSON中的字典和列表进行递归排序。我没有使用json模块对键进行排序,因为它在字典中的排序“深度”不够。你知道吗
TypeError
源于两个字典之间的比较:当相似的dict被内置的sorted
评估时,它们的键和值会进行比较。如果键相同,则比较它们的值。如果值的类型不同,则会引发TypeError
。你知道吗
以下是JSON:
{
"features": [{
"attributes": {
"AnalysisArea": 0.21410982
}
}, {
"attributes": {
"AnalysisArea": null
}
}]
}
函数如下:
def sort_json(iter_obj):
if isinstance(iter_obj, dict):
return sorted((k, sort_json(v)) for k, v in iter_obj.items())
elif isinstance(iter_obj, list):
return sorted(sort_json(x) for x in iter_obj)
else:
return iter_obj
我的想法是:a)将None类型的对象强制转换为float或string(因为如果None与Str进行比较,TypeError
也会发生);b)创建一个自定义类并重写__lt__
、__gt__
特殊方法,以基于类型比较返回True
或False
。(例如,如果a=无,b=0.0,则a
有没有更好的方法来避免这个问题,并允许sorted函数在不引发TypeError
的情况下为我进行排序?你知道吗
sorted()允许您指定键函数,对于Python3,有一个functools.cmp_to_key()允许您提供一个比较函数(就像在python2中一样)
编写一个比较函数,它将按您希望的方式对其进行排序。你知道吗
相关问题 更多 >
编程相关推荐