如何一次性递归排序Python字典所有层级的键及嵌套子键?
Python2.7 字典全层级键排序方案
你可以通过递归函数结合OrderedDict实现全层级的键排序,同时支持嵌套列表的元素排序,完全适配Python2.7版本的使用需求。
实现代码
首先导入依赖模块:
from collections import OrderedDict
递归排序函数如下:
def sort_nested_structure(obj): # 处理字典类型:按key排序后递归处理值 if isinstance(obj, dict): sorted_dict = OrderedDict() for key in sorted(obj.keys()): sorted_dict[key] = sort_nested_structure(obj[key]) return sorted_dict # 处理列表类型:递归处理每一项后排序元素 elif isinstance(obj, list): processed_list = [sort_nested_structure(item) for item in obj] # 若不需要排序列表元素,可删除下一行 processed_list.sort() return processed_list # 基础类型直接返回 else: return obj
使用示例
# 输入你的原始字典 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", }, "key1":"value1", } # 执行排序 sorted_dict = sort_nested_structure(dict_1)
结果验证
返回的sorted_dict是OrderedDict类型,会严格保留排序后的键顺序,你可以通过遍历键或者序列化打印查看效果:
import json print json.dumps(sorted_dict, indent=4)
输出结果与你提供的预期结构完全一致。
自定义调整说明
- 若不需要对列表中的元素排序,删除
processed_list.sort()这一行即可 - 若需要自定义排序规则,可修改
sorted(obj.keys(), key=你的自定义排序函数)、processed_list.sort(key=你的自定义排序函数)中的key参数 - 原始字典如果存在重复键,Python原生字典会自动保留最后一次赋值的键值对,属于正常特性
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

