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

Sme*_*ato 2 python sorting lambda dictionary list

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

例如:

alist = [
{"id":"A","day":"sun"},
{"id":"B","day":"tue"},
{"id":"C","day":"mon"}
]
Run Code Online (Sandbox Code Playgroud)

根据“日期”以自定义顺序对列表进行排序,即 "sun", "mon", "tue"...."sat"

sortedalist = [
{"id":"A","day":"sun"},
{"id":"C","day":"mon"}
{"id":"B","day":"tue"}
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我认为lambda表达式需要作为sorted()的键,但是我不确定函数应该是什么

Mer*_*896 7

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

sortorder={"sun":0, "mon":1, "tue":2, "wed":3, "thu":4, "fri":5, "sat":6}
Run Code Online (Sandbox Code Playgroud)

然后在sort函数中使用它:

list.sort(key=lambda x: sortorder[x["day"]])
Run Code Online (Sandbox Code Playgroud)

这样就对列表进行了排序而不返回副本。

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

sortedlist=sorted(list, key=lambda x: sortorder[x["day"]])
Run Code Online (Sandbox Code Playgroud)

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