python按自定义顺序排序字典列表[重复]

Posted

技术标签:

【中文标题】python按自定义顺序排序字典列表[重复]【英文标题】:python sorting list of dictionary by custom order [duplicate] 【发布时间】:2018-10-22 04:26:07 【问题描述】:

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

例如:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

然后在排序函数中使用这个:

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

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

如果你需要一份排序后的列表,那么你可以使用

sorted_list=sorted(my_list, key=lambda x: sortorder[x["day"]])

在原来的问题中,列表的变量名叫做list。请注意,调用列表 list 是不好的做法,因为 python 内部被它覆盖了。

【讨论】:

不错。我想知道是否有办法将datetime 拉入其中,因为我们正在处理一周中的几天? @patrick 我真的不知道。也许有办法,但我认为如果我们使用datetime,代码不会变得更易读、更容易、更可扩展或更不容易出错。但是如果你找到一个聪明的方法,请编辑我的答案或写一个新的 - 学术兴趣肯定存在:) 谢谢!关键在我的问题中并不完全相同,我只是想将问题概括一下,使其易于理解。我已经修改了变量以免混淆其他人! 如果我有一个 的 sort_order 可以这样做吗?

以上是关于python按自定义顺序排序字典列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按自定义顺序排序列表

在 Eloquent 中按自定义顺序对集合进行排序 [重复]

如何按自定义顺序对 JavaScript 中的数组进行排序? [复制]

按自定义顺序对数组的php数组进行排序

PHP按自定义顺序对工作日和月份-年份数组进行排序

python 按自定义lambda函数排序