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

2024-09-28 19:10:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

有没有更好的方法来避免这个问题,并允许sorted函数在不引发TypeError的情况下为我进行排序?你知道吗


Tags: 函数jsonobj类型return字典排序sort