gpt4 book ai didi

python - 尝试首先按日期然后按最大数量对 python 中的元组列表进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:06 24 4
gpt4 key购买 nike

我有一个元组列表,我试图按日期排序,然后按最大数排序。所以基本上当你有两个相同的日期时,它会将数字最大的元组放在第一位。请参见下面的示例。

我的元组列表

dataLst = [["Mike", 50, "08/10/2016"], ["Bob", 100, "08/10/2016"], ["Dave", 500, "08/01/2016"], ["Paul", -50, "08/20/2016"], ["Sam", 250, "08/30/2016"]]

然后我按元组中的日期对列表进行排序。

sDataLst = sorted(dataLst, key=operator.itemgetter(2))

然后我按数字倒序对排序后的列表进行排序。

sorted(sDataLst,key=operator.itemgetter(1), reverse=True) 

当我打印排序列表时,我得到以下信息。

print sDataLst

[['Dave', 500, '08/01/2016'], ['Mike', 50, '08/10/2016'], ['Bob', 100, '08/10/2016'], ['Paul', -50, '08/20/2016'], ['Sam', 250, '08/30/2016']]

如果您查看列表中具有相同日期的第二项和第三项,它们应该被颠倒,因为第三项中的数字大于第二项中的数字。我正在寻找的结果如下。

[['Dave', 500, '08/01/2016'], ['Bob', 100, '08/10/2016'], ['Mike', 50, '08/10/2016'], ['Paul', -50, '08/20/2016'], ['Sam', 250, '08/30/2016']]

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

由于 mm/dd/yyyy 的顺序,您不能将日期作为字符串进行比较,您可以使用 datetime 来:

from datetime import datetime
strp = datetime.strptime

srted = sorted(dataLst, key=lambda sub: (strp(sub[2],"%m/%d/%Y"), -sub[1]))

或者只是将日期的顺序拆分并反转​​为 yyyy, mm, dd:

def iso(sub):
mm, dd, yy = sub.split("/")
return yy, mm, dd

srted = sorted(dataLst, key=lambda sub: (iso(sub[2]), -sub[1]))

两者都给你相同的输出:

 In [24]: sorted(dataLst, key=lambda sub: (iso( sub[2]), -sub[1]))Out[24]: 
[['Dave', 500, '08/01/2016'],
['Bob', 100, '08/10/2016'],
['Mike', 50, '08/10/2016'],
['Paul', -50, '08/20/2016'],
['Sam', 250, '08/30/2016']]

In [25]: sorted(dataLst, key=lambda sub: (strp(sub[2],"%m/%d/%Y"), -sub[1]))

Out[25]:
[['Dave', 500, '08/01/2016'],
['Bob', 100, '08/10/2016'],
['Mike', 50, '08/10/2016'],
['Paul', -50, '08/20/2016'],
['Sam', 250, '08/30/2016']]

区别在于拆分速度更快,如下所示:

In [28]: timeit  sorted(dataLst, key=lambda sub: (strp(sub[2],"%m/%d/%Y"), -sub[1]))
10000 loops, best of 3: 66.4 µs per loop

In [29]: timeit sorted(dataLst, key=lambda sub: (iso( sub[2]), -sub[1]))
100000 loops, best of 3: 4.97 µs per loop

关于python - 尝试首先按日期然后按最大数量对 python 中的元组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39312362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com