python-3.x - 按键排序字典
问题描述
我有一本字典,它的键和值是年月组合。我使用 OrderedDict 对字典进行排序并获得如下结果。在我的预期结果中,在“2021-1”之后,应该是“2021-2”。但是“2021-10”介于两者之间。
{
"2020-11": 25,
"2020-12": 861,
"2021-1": 935,
"2021-10": 1,
"2021-2": 4878,
"2021-3": 6058,
"2021-4": 3380,
"2021-5": 4017,
"2021-6": 1163,
"2021-7": 620,
"2021-8": 300,
"2021-9": 7
}
我的预期结果应该如下所示。我希望字典按最少日期到最后日期排序
{
"2020-11": 25,
"2020-12": 861,
"2021-1": 935,
"2021-2": 4878,
"2021-3": 6058,
"2021-4": 3380,
"2021-5": 4017,
"2021-6": 1163,
"2021-7": 620,
"2021-8": 300,
"2021-9": 7,
"2021-10": 1
}
感谢您是否可以提供帮助。
解决方案
如果要自定义排序方式,请使用sorted
with 参数key
:
from typing import OrderedDict
from decimal import Decimal
data = {
"2020-11": 25,
"2020-12": 861,
"2021-1": 935,
"2021-10": 1,
"2021-2": 4878,
"2021-3": 6058,
"2021-4": 3380,
"2021-5": 4017,
"2021-6": 1163,
"2021-7": 620,
"2021-8": 300,
"2021-9": 7
}
def year_plus_month(item):
key = item[0].replace("-", ".")
return Decimal(key)
data_ordered = OrderedDict(sorted(data.items(), key=year_plus_month))
print(data_ordered)
我使用Decimal
而不是float
避免任何不稳定的浮点精度。
推荐阅读
- java - 指南针覆盖地图使用 osmdroid 6.1
- tensorflow - 使用 Keras 将 theano 后端转换为 tensorflow 后端需要什么?
- parameter-sets - 如何增加 TFS 中的参数集限制?
- matlab - 在matlab中将向量拆分为更小的向量
- c - 按下鼠标按钮时如何打印连续消息(g_timeout_add)?
- amazon-web-services - 使 VPC 创建可选
- git - 在 Git Bash 中重新输入用户名和密码以访问 Github
- angular - 收到“错误 TS2304:找不到名称‘firebase’。”
- javascript - JSR-223:如何将可变参数主机函数绑定到 ScriptEngine
- r - 将单独的月份和年份列合并到 ggplot2 中