如何用Python按自定义顺序对字典列表进行排序?
按自定义顺序对字典列表排序
没问题,你的思路方向完全正确——我们确实可以借助sorted()的key参数,结合自定义的顺序映射来实现这个需求。具体做法很简单,分两步走:
- 定义自定义顺序的映射关系
首先把想要的排序顺序写成一个列表,再把每个day对应到它在列表里的索引位置(索引越小,排序越靠前)。用字典做这个映射会让查找效率更高:
# 自定义的日期排序顺序 day_order = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"] # 生成日期到排序优先级的映射字典 day_rank = {day: idx for idx, day in enumerate(day_order)}
- 用lambda作为key参数完成排序
在sorted()里,用lambda函数提取每个字典的day值,再通过day_rank拿到它对应的优先级序号,sorted()就会按照这个序号来排序了:
alist = [ {"id":"A","day":"sun"}, {"id":"B","day":"tue"}, {"id":"C","day":"mon"} ] sortedalist = sorted(alist, key=lambda x: day_rank[x["day"]]) print(sortedalist)
运行这段代码就能得到你想要的结果:
[ {"id":"A","day":"sun"}, {"id":"C","day":"mon"}, {"id":"B","day":"tue"} ]
额外小提示
如果你的列表里可能存在不在自定义顺序里的day值,为了避免抛出KeyError,可以用dict.get()方法给这些“例外值”设置默认优先级(比如直接放到列表最后):
sortedalist = sorted(alist, key=lambda x: day_rank.get(x["day"], len(day_order)))
内容的提问来源于stack exchange,提问作者Smelly Potato
相关产品推荐
相关产品推荐

