Python中如何将嵌套字典通过快速排序转换为OrderedDict?
对嵌套字典按指定字段排序并转换为OrderedDict的方法
嘿,这个需求其实很容易实现,核心就是先对原字典的键值对按规则排序,再转换成OrderedDict就行。我给你一步步拆解:
步骤1:导入必要的模块
首先要导入collections里的OrderedDict,如果是Python 3.7及以上版本,其实普通字典已经默认保留插入顺序了,但如果需要兼容旧版本或者用到OrderedDict的特殊方法,还是得导入它:
from collections import OrderedDict
步骤2:准备原字典
你的示例原字典可以这么定义:
original_dict = { 'susan': {'number': '5', 'fav_color': 'yellow'}, 'josh': {'number': '1', 'fav_color': 'blue'}, 'casey': {'number': '11', 'fav_color': 'orange'} }
步骤3:按指定字段排序
这里的关键是用sorted()函数,指定排序的依据是子字典里的number字段。注意!你的number是字符串类型,如果直接按字符串排序,'11'会排在'5'前面(因为字符串比较是按字符顺序),所以必须把它转成整数再排序:
# 排序原字典的键值对,lambda表达式提取子字典的number并转成整数作为排序key sorted_items = sorted(original_dict.items(), key=lambda item: int(item[1]['number']))
步骤4:转换为OrderedDict
把排序后的键值对列表传入OrderedDict的构造函数就搞定了:
ordered_dict = OrderedDict(sorted_items)
验证结果
打印一下看看是不是你想要的顺序:
print(ordered_dict)
输出结果:
OrderedDict([('josh', {'number': '1', 'fav_color': 'blue'}), ('susan', {'number': '5', 'fav_color': 'yellow'}), ('casey', {'number': '11', 'fav_color': 'orange'})])
额外说明
- 如果你的
number字段本身就是整数类型,那排序时就不用转成int了,直接用lambda item: item[1]['number']就行。 - 如果你不需要兼容Python 3.6及以下版本,其实直接用
dict(sorted_items)就能得到有序的普通字典,因为3.7+的Python字典已经默认维护插入顺序了。
内容的提问来源于stack exchange,提问作者babyDev
相关产品推荐
相关产品推荐

