Python 使用“内置”时引发的TypeError;分类;关于JSON

Python 使用“内置”时引发的TypeError;分类;关于JSON,python,json,list,python-3.x,sorting,Python,Json,List,Python 3.x,Sorting,使用Python3.5,在对JSON进行排序时,我遇到了一个TypeError。该函数可以在StackOverflow上找到,并对有效JSON中的字典和列表进行递归排序。我没有使用json模块对键进行排序,因为它在字典中的排序“深度”不够 TypeError源于两个字典之间的比较:当内置排序的对相似的dict进行评估时,会对它们的键和值进行比较。如果键相同,则比较它们的值。如果值的类型不同,则会引发TypeError 以下是JSON: { "features": [{ "

使用Python3.5,在对JSON进行排序时,我遇到了一个
TypeError
。该函数可以在StackOverflow上找到,并对有效JSON中的字典和列表进行递归排序。我没有使用json模块对键进行排序,因为它在字典中的排序“深度”不够

TypeError
源于两个字典之间的比较:当内置
排序的
对相似的dict进行评估时,会对它们的键和值进行比较。如果键相同,则比较它们的值。如果值的类型不同,则会引发
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-type对象强制转换为float或string(因为如果None与Str进行比较,
TypeError
也会发生),或者b)创建一个自定义类并重写
\lt\uuu
,根据类型比较返回
的特殊方法。(例如,如果a=无,b=0.0,则a 有没有更好的方法来避免这个问题,并允许排序函数为我进行排序,而不引发
类型错误

允许您指定键函数,而对于Python3,有一个允许您提供比较函数的


编写一个比较函数,该函数将按您希望的方式对其进行排序。

您希望结果是什么?如何“null”一个数字要相对排序?我希望对一个更大的JSON进行排序,但是当发现这个模式时,Python抛出一个TypeError。下面是一个示例:为什么要对列表中的值进行排序,列表中的顺序很重要。如果你有一个字典列表,你希望如何对字典进行排序?你可能会这样做吗nt使用
集合。OrderedDict
所以你仍然有一个字典,但键的顺序被保留?如果你想对字典列表进行排序,你会按什么逻辑进行排序?@Drew:我明白。我的问题是,你希望顺序是什么。假设我给你一个类似
[1,null,“hello”]
。您认为排序函数返回的“正确”顺序是什么?