如何一次对字典的所有键、子键、子子键等进行排序?

Posted

技术标签:

【中文标题】如何一次对字典的所有键、子键、子子键等进行排序?【英文标题】:How to sort all the keys, sub-keys, sub-sub-keys, etc of a dictionary at once? 【发布时间】:2021-10-31 19:29:35 【问题描述】:

有没有办法一次对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",
           

有什么方法可以做到吗?

请注意:

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

我使用的是 Python 2.7.17,但无法更新。但是顺序不是 保存在 3.7 之前的 Python 版本的字典中,所以我敢打赌 必须使用OrderedDict 进行排序。

【问题讨论】:

你的python版本是3.7或以上吗?字典中不保留 3.7 以下的插入顺序。 创建一个函数,对顶层的dict进行排序,然后在节点是dict实例的每个节点上递归调用它 【参考方案1】:

首先,重要的是要知道字典没有顺序。所以,如果你想订购一个 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

【讨论】:

以上是关于如何一次对字典的所有键、子键、子子键等进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何一次对字典或列表中的所有嵌套字典和列表进行排序?

代号一添加ios构建提示子键

删除带有子键的键

遍历注册表某一子键下的所有键值

RegEnumKeyExW不返回所有名称子键

转 Python的WinReg项通过子键循环