首页 > 解决方案 > 按键排序字典

问题描述

我有一本字典,它的键和值是年月组合。我使用 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
    }

感谢您是否可以提供帮助。

标签: python-3.xordereddict

解决方案


如果要自定义排序方式,请使用sortedwith 参数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避免任何不稳定的浮点精度。


推荐阅读