使用Python 3.5,当我对JSON进行排序时,我遇到了TypeError
。该函数可以在StackOverflow上找到,并递归排序在有效JSON中找到的字典和列表。我没有使用json-module对我的密钥进行排序,因为它没有排序"深度"足够进入字典。
TypeError
来自两个词典之间的比较:当内置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与Str进行比较,也会发生TypeError
)或b)创建自定义类和覆盖__lt__
,__gt__
特殊方法,根据类型比较返回True
或False
。 (例如,如果a = None且b = 0.0,则a
有没有更好的方法可以避免这个问题,并允许排序函数在不提出TypeError
的情况下对我进行排序?
答案 0 :(得分:0)
sorted()允许您指定键函数,而对于Python3,有一个functools.cmp_to_key()可以让您提供比较函数(就像在Python 2中一样)
编写一个比较函数,对它进行排序,但是你希望它排序。