使用内置"排序"时引发TypeError在JSON上

时间:2017-02-14 21:33:54

标签: python json list python-3.x sorting

使用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__特殊方法,根据类型比较返回TrueFalse。 (例如,如果a = None且b = 0.0,则a

有没有更好的方法可以避免这个问题,并允许排序函数在不提出TypeError的情况下对我进行排序?

1 个答案:

答案 0 :(得分:0)

sorted()允许您指定键函数,而对于Python3,有一个functools.cmp_to_key()可以让您提供比较函数(就像在Python 2中一样)

编写一个比较函数,对它进行排序,但是你希望它排序。