首页 > 解决方案 > 按由数字和字母组成的键对字典进行排序

问题描述

我有一个包含不同季度(年份)的数据的字典:

"data": {
        "Q3/2016": 86,
        "Q1/2016": 85,
        "Q4/2016": 69,
        "Q2/2016": 69,
        "Q2/2017": 82,
        "Q1/2017": 66,
    },

我怎样才能对它进行排序,使它看起来像这样

"data": {
        "Q1/2016": 85,
        "Q2/2016": 69,
        "Q3/2016": 86,
        "Q4/2016": 69,
        "Q1/2017": 66,
        "Q2/2017": 82,
    },

标签: pythonsortingdictionary-comprehension

解决方案


字典不能就地排序,因为它们没有顺序,但是从 Python 3.7 开始,它们会记住插入顺序,因此我们可以通过对无序字典中的键值对进行排序来构建“有序”字典。

所以真正重要的部分是key我们作为参数传递给sorted. 在下面的代码中,键是一个 lambda 函数,它获取每个键,将其拆分/并反转​​结果元组,以便键首先按年份排序,然后按季度排序:

d = {"data": { 
    "Q3/2016": 86, 
    "Q1/2016": 85, 
    "Q4/2016": 69, 
    "Q2/2016": 69, 
    "Q2/2017": 82, 
    "Q1/2017": 66, 
    }
}
d['data'] = {k: v for k, v in sorted(d['data'].items(), key=lambda x: x[0].split('/')[::-1])}
print(d)

输出:

{'data': {
     'Q1/2016': 85,
     'Q2/2016': 69,
     'Q3/2016': 86,
     'Q4/2016': 69,
     'Q1/2017': 66,
     'Q2/2017': 82}
}

推荐阅读