python - 如何在 Python 中对列表中的列进行排序
问题描述
有一个像这样的列表
List = [['19-03-2006', 10000 ],
['02-09-2006', 68 ],
['03-07-2006', 300 ],
['03-07-2006', 80 ],
['03-07-2006', 200 ],
['03-07-2006', 30 ]]
尝试输出如下:
List = [['19-03-2006', 30 ]]
['19-03-2006', 10000 ],
['03-07-2006', 300 ],
['02-09-2006', 68 ],
['02-09-2006', 80 ],
['15-10-2006', 200 ]]
首先按日期排序,从最早到最晚,然后按数字从低到高排序。如果不使用日期时间之类的模块,我怎么能做到这一点。
解决方案
您可以使用良好的旧比较器转换为键功能。从 Python 3.2 开始,标准库中添加了 functools.cmp_to_key() 函数
from functools import cmp_to_key
def comparator(a, b):
a_date, a_num = a
b_date, b_num = b
a_date = tuple(map(int, reversed(a_date.split("-"))))
b_date = tuple(map(int, reversed(b_date.split("-"))))
# By year
if a_date[0] > b_date[0]:
return 1
elif a_date[0] < b_date[0]:
return -1
else:
# By month
if a_date[1] > b_date[1]:
return 1
elif a_date[1] < b_date[1]:
return -1
else:
# By day
if a_date[2] > b_date[2]:
return 1
elif a_date[2] < b_date[2]:
return -1
else:
# By number
if a_num > b_num:
return 1
elif a_num < b_num:
return -1
else:
return 0
data = [
['19-03-2006', 10000],
['02-09-2006', 68],
['03-07-2006', 300],
['03-07-2006', 80],
['03-07-2006', 200],
['03-07-2006', 30]
]
sorted(data, key=cmp_to_key(comparator))
输出:
[['19-03-2006', 10000],
['03-07-2006', 30],
['03-07-2006', 80],
['03-07-2006', 200],
['03-07-2006', 300],
['02-09-2006', 68]]
推荐阅读
- reactjs - ScrollView Horizontal 在本机反应中无法正常工作
- javascript - 在第一次渲染时开始倒计时 N 个项目
- openstack - 目标 WSGI 脚本 '/usr/share/openstack-dashboard/openstack_dashboard/wsgi.py' 不能作为 Python 模块加载
- c++ - 如何在 C++ 中更新记录文件?
- java - Java 未正确删除数据库数据
- python - 从数据库实例 Flask 创建 API 端点
- assembly - x86 汇编中的除法导致程序暂停程序
- regex - GROK 正则表达式捕获组不匹配
- restructuredtext - 重构文本中的左对齐图形指令
- mongodb - 如何使聚合返回帖子的其余部分?