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 中按自定义顺序对集合进行排序 [重复]