-1

有没有办法一次对python字典的所有键、子键、子子键等进行排序?

假设我有字典

dict_1 = { 
            "key9":"value9",
            "key5":"value5",
            "key3":{
                    "key3_1":"value3_1",
                    "key3_3":"value3_3",
                    }
            "key4":"value4",
            "key2":"value2",
            "key8":{
                    "key8_1":"value8_1",
                    "key8_5":[                              
                              "value8_5_3",
                              "value8_5_1",
                              ]
                    "key8_2":"value8_2",
                    }
            "key4":"value4",            
            "key1":"value1",
         }

我希望它排序为

dict_1 = { 
        "key1":"value1",
        "key2":"value2",
        "key3":{
                "key3_1":"value3_1",
                "key3_3":"value3_3",                    
                }
        "key4":"value4",
        "key5":"value5",                        
        "key8":{
                "key8_1":"value8_1",
                "key8_2":"value8_2",
                "key8_5":[
                          "value8_5_1",                 
                          "value8_5_3",                 
                          ]                 
                }           
        "key9":"value9",
     }      

有没有办法做到这一点?

请注意:

  • 可能 mydict_1可能有多个级别的子键(嵌套字典)或子值(嵌套列表)。

  • 我正在使用 Python 2.7.17,我无法更新它。但是在 3.7 之前的 Python 版本的字典中没有保留顺序,所以我敢打赌必须使用OrderedDict来完成排序。

4

1 回答 1

2

首先,重要的是要知道字典没有排序。所以,如果你想订购一个 dict,你需要使用collections.OrderedDict(从 Python 开始就存在2.7)。

然后,这是一个递归函数的用例:

from collections import OrderedDict


def order_dict(d):
    ordered_dict = OrderedDict()
    for key in sorted(d.keys()):
        val = d[key]
        if isinstance(val, dict):
            val = order_dict(val)
        ordered_dict[key] = val
    return ordered_dict
于 2021-09-02T10:24:17.203 回答