python - 按由数字和字母组成的键对字典进行排序
问题描述
我有一个包含不同季度(年份)的数据的字典:
"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,
},
解决方案
字典不能就地排序,因为它们没有顺序,但是从 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}
}
推荐阅读
- flutter - ListTile 上 onTap 上的警报对话框
- excel - 如何更改 Excel 公式中的文件名以在表格中的每个单元格中刷新?
- git - 在 Bitbucket 存储库中有一些区分大小写的文件夹名称和文件名
- android - 带有nestedscrollview的嵌套RecyclerView不滚动
- python - 尽管设置超时,套接字 recv 仍挂起
- raku - 如何在 Raku 中删除多方法
- r - 并排条形图和同一图中的折线图
- hyperledger-fabric - 如果我们在超级账本结构中使用 PKI,为什么我们需要 Fabric TLSCA?
- python-3.x - 为什么 librosa STFT 显示错误的频率?
- rust - Rust Chrono 解析日期字符串、ParseError(NotEnough) 和 ParseError(TooShort)