如何基于指定列表或字典对字典进行自定义排序?
用外部列表/字典给字典排序(优先简便实现)
嘿,这个需求太常见了!优先用列表来定义排序顺序绝对是最简便的方案——毕竟列表本身就是有序结构,直接拿来当参照就行,代码少还直观。下面给你一步步拆解实现:
一、用列表定义排序顺序(推荐)
假设你有这样的原始字典,以及自定义的排序顺序列表:
# 你的原始字典 my_dict = {"b": 2, "a": 1, "c": 3, "d": 4, "e": 5} # 自定义排序顺序:按a→c→b→d的优先级排列 sort_order = ["a", "c", "b", "d"]
实现步骤:
- 先按排序列表的顺序,把存在于原字典的键值对挑出来,组装成新字典
- (可选)如果原字典里有不在排序列表的键,你可以选择把它们追加到末尾(比如按默认字母序)或者直接忽略
代码示例:
# 第一步:按自定义顺序生成核心部分 sorted_dict = {key: my_dict[key] for key in sort_order if key in my_dict} # 第二步:处理不在排序列表里的剩余键(可选,这里按原字典的默认顺序追加) remaining_keys = [key for key in my_dict if key not in sort_order] sorted_dict.update({key: my_dict[key] for key in remaining_keys}) print(sorted_dict) # 输出结果:{'a': 1, 'c': 3, 'b': 2, 'd': 4, 'e': 5}
兼容旧版本Python(3.6及以下)
如果你的Python版本低于3.7(字典不保留插入顺序),只需要改用collections.OrderedDict即可:
from collections import OrderedDict sorted_dict = OrderedDict((key, my_dict[key]) for key in sort_order if key in my_dict) remaining_keys = [key for key in my_dict if key not in sort_order] sorted_dict.update((key, my_dict[key]) for key in remaining_keys)
二、用字典定义排序顺序(备选)
如果你一定要用字典来定义排序权重(比如给每个键分配一个排序优先级数字),也可以实现,但代码稍复杂一点:
# 用字典定义排序权重:数字越小,排序越靠前 sort_order = {"a": 0, "c": 1, "b": 2, "d": 3} my_dict = {"b": 2, "a": 1, "c": 3, "d": 4, "e": 5} # 用sorted函数根据权重排序,不在权重字典里的键会被放到最后 sorted_items = sorted(my_dict.items(), key=lambda x: sort_order.get(x[0], float('inf'))) sorted_dict = dict(sorted_items) print(sorted_dict) # 输出结果:{'a': 1, 'c': 3, 'b': 2, 'd': 4, 'e': 5}
总结
显然用列表的方案更简便:定义顺序直观,代码量少,可读性也更强,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user9451912
相关产品推荐
相关产品推荐

