如何一次对字典的所有键、子键、子子键等进行排序?
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
【讨论】:
以上是关于如何一次对字典的所有键、子键、子子键等进行排序?的主要内容,如果未能解决你的问题,请参考以下文章