如何对包含许多字典和列表的python列表进行递归排序?

如何对包含许多字典和列表的python列表进行递归排序?,python,dictionary,recursion,Python,Dictionary,Recursion,目的:对一本大字典(大约80MB)进行排序 更大的用途:使用排序字典执行dictdiff from dictdiffer模块,以查找所有可能的差异,因为dictdiffer不会对子系列dict、list等进行排序,而只是进行行-行比较,这在现在看来是无用的 下面是一个示例,其中包含子字典、列表和字符串的组合: 大族的一个子族示例: {"selector": "bus", "acrh": "isr", "category": ["NONES","BACKEND"], "priority": [4,

目的:对一本大字典(大约80MB)进行排序

更大的用途:使用排序字典执行dictdiff from dictdiffer模块,以查找所有可能的差异,因为dictdiffer不会对子系列dict、list等进行排序,而只是进行行-行比较,这在现在看来是无用的

下面是一个示例,其中包含子字典、列表和字符串的组合:

大族的一个子族示例:

{"selector": "bus", "acrh": "isr", "category": ["NONES","BACKEND"], "priority": [4,3,1], "nl_date": "6/19/2005", "rl_date": "", "sl_date": "7/3/2040", "stats": {"ports": 2, "music": "", "jack": [54,34,21]}}
How i want it to be:
{"acrh": "isr","category": ["BACKEND","NONES"],"nl_date": "6/19/2005","priority": [1,3,4],"rl_date": "","selector": "bus", "sl_date": "7/3/2040", "stats": {"jack": [21,34,54],"music": "","ports": 2}}
How logic is printing now:
How i want it to be:
{"acrh": "isr","category": ["BACKEND","NONES"],"nl_date": "6/19/2005","priority":[4,3,1],"rl_date": "","selector": "bus", "sl_date": "7/3/2040", "stats": {"ports": 2, "music": "", "jack": [54,34,21]}}
似乎只有键被排序,但子列表和dict的值没有排序

我的代码

prj = {"selector": "bus", "acrh": "isr", "category": ["NONES","BACKEND"], "priority": [4,3,1], "nl_date": "6/19/2005", "rl_date": "", "sl_date": "7/3/2040", "stats": {"ports": 2, "music": "", "jack": [54,34,21]}}

spro = {}
        for k,v in sorted(prj.items()):
            spro[k] = boss.gosort(self,v)
            print(k,"->",spro[k])


    def ds(self,d):

        trad = {}
        for key, value in sorted(d.items()):
            if isinstance(value, dict):
                trad[key] = boss.ds(self,value)
            elif isinstance(value, list):
                trad[key] = boss.gosort(self,value)
            else:
                trad[key] = value
        return trad

    def gosort(self,inlist):

        filist = []
        for each in inlist:
            print("each is:",each,type(each))
            if isinstance(each, dict):
                filist.append(boss.ds(self,each))
            elif isinstance(each, list):
                each.sort()
                filist.append(each)
            else:
                filist.append(each)
        return filist  ```

Any help would be appriciated.
输出
请忽略带有“我希望它是什么样子”的第5行。类型。在这个排序中_func=lambda v:v如果isinstance(v,list)进行了其他排序(v)我将'str'编辑为'list'以便在列表下进行排序,现在可以使用较小的JSON。我将测试更大的JSON并恢复。
x = {"selector": "bus", "acrh": "isr", "category": ["NONES","BACKEND"], "priority": [4,3,1], "nl_date": "6/19/2005", "rl_date": "", "sl_date": "7/3/2040", "stats": {"ports": 2, "music": "", "jack": [54,34,21]}}

def convert(d):
  # sort nested lists
  sort_func = lambda v: v if isinstance(v, str) else sorted(v)
  y = {k:sort_func(v) for k, v in x.items()}

  # using JSON to sort dictionary
  return json.dumps(y, sort_keys=True, indent=2)

print(convert(x))
{
  "acrh": "isr",
  "category": [
    "BACKEND",
    "NONES"
  ],
  "nl_date": "6/19/2005",
  "priority": [
    1,
    3,
    4
  ],
  "rl_date": "",
  "selector": "bus",
  "sl_date": "7/3/2040",
  "stats": [
    "jack",
    "music",
    "ports"
  ]
}