【发布时间】:2019-04-05 07:43:46
【问题描述】:
我想按列表键然后按日期对这个字典列表进行排序。 我正在尝试根据 label_order 按“标签”对字典进行排序,然后按“日期”降序排列。
label_order = [3, 4, 2, 1]
data = [
{'label': 1, 'data': 5, 'date': datetime(2018, 12, 31)},
{'label': 3, 'data': 2, 'date': datetime(2017, 12, 31)},
{'label': 3, 'data': 1, 'date': datetime(2018, 12, 31)},
{'label': 4, 'data': 3, 'date': datetime(2018, 12, 31)},
{'label': 4, 'data': 4, 'date': datetime(2018, 12, 25)},
]
排序后会是这样的:
data = [
{'label': 3, 'data': 1, 'date': datetime(2018, 12, 31)},
{'label': 3, 'data': 2, 'date': datetime(2017, 12, 31)},
{'label': 4, 'data': 3, 'date': datetime(2018, 12, 31)},
{'label': 4, 'data': 4, 'date': datetime(2018, 12, 25)},
{'label': 1, 'data': 5, 'date': datetime(2018, 12, 31)},
]
我已经尝试过 lambda 表达式和 itemgetter,但我很难为排序键组合正确的策略。也许它只是想一次做太多事情。
任何帮助或指导将不胜感激。
【问题讨论】:
-
提示:
label_order.index(item['label'])返回该列表中每个项目标签的索引,该索引对应于其排序顺序。 -
让我们看看最接近预期结果的 lambda
-
我会将
label_order更改为将标签映射到其排序位置的字典。 IE。先是 3,然后是 4,所以应该是{3:1, 4:2, 2:3, 1:4}。