python按自定义顺序排序字典列表

时间:2018-05-11 17:46:44

标签: python list sorting dictionary lambda

我搜索过我们可以使用排序按字母顺序按键排序字典列表,但它是按自定义顺序对其进行排序吗?

例如:

alist = [
{"id":"A","day":"sun"},
{"id":"B","day":"tue"},
{"id":"C","day":"mon"}
]

根据" day"排序alist按自定义顺序,即"sun", "mon", "tue"...."sat"

sortedalist = [
{"id":"A","day":"sun"},
{"id":"C","day":"mon"}
{"id":"B","day":"tue"}
]

我该怎么做?我认为lambda表达式需要成为sorted()的关键,但我不确定应该是什么函数

1 个答案:

答案 0 :(得分:5)

您可以在字典中定义自定义排序顺序

sortorder={"sun":0, "mon":1, "tue":2, "wed":3, "thu":4, "fri":5, "sat":6}

然后在sort函数中使用它:

list.sort(key=lambda x: sortorder[x["day"]])

这样就可以在不返回副本的情况下对列表进行排序。

如果您需要已排序的列表副本,则可以使用

sortedlist=sorted(list, key=lambda x: sortorder[x["day"]])

请注意,调用列表list是不好的做法,因为用此覆盖了python内部。