如何对Python列表先按dt_1升序再按duration_milliseconds升序排序?
问题描述
我有如下格式的Python列表:
a = [ { "dt_1":datetime.datetime(...), "duration_milliseconds":<int> }, { "dt_1":datetime.datetime(...), "duration_milliseconds":<int> }, { "dt_1":datetime.datetime(...), "duration_milliseconds":<int> }, { "dt_1":datetime.datetime(...), "duration_milliseconds":<int> } ]
希望按以下规则对该列表排序:先按dt_1字段排序(旧日期时间在前),若dt_1相同则按duration_milliseconds排序(时长较短的在前)。
解决方案
在Python中可以通过指定排序键实现多条件排序,有两种常用方式:
方式一:原地排序(修改原列表)
使用列表的.sort()方法,通过lambda表达式定义排序优先级:
a.sort(key=lambda x: (x["dt_1"], x["duration_milliseconds"]))
方式二:生成新列表(原列表不变)
使用sorted()函数,通过lambda指定排序键,返回排序后的新列表:
sorted_a = sorted(a, key=lambda x: (x["dt_1"], x["duration_milliseconds"]))
逻辑说明
排序时会先按元组第一个元素x["dt_1"]升序排列(默认升序规则下,旧日期自然排在前面);当dt_1值相同时,再按第二个元素x["duration_milliseconds"]升序排列(数值更小的短时长会排在前面),完全匹配需求。
内容的提问来源于stack exchange,提问作者Chris P
相关产品推荐
相关产品推荐

