gpt4 book ai didi

python - 根据两个键排序,第一个降序排序,第二个升序排序

转载 作者:行者123 更新时间:2023-11-28 21:15:23 27 4
gpt4 key购买 nike

我有一个元组列表:

lst = [(1,2), (3,2), (1,3), (3,4)]

我想根据第一个键按降序对列表进行排序,但是对于该键的相同值,列表应该根据第二个键进行排序但是按升序

但如果我这样做:

srt_lst = sorted(lst, key=lambda val: (val[0], val[1]), reverse = True)

它给了我:

[(3, 4), (3, 2), (1, 3), (1, 2)]

但是我要找的List是

[(3, 2), (3, 4), (1, 2), (1, 3)]

编辑

抱歉,我已经提供了所有需要的信息!!!!

请考虑,按照我的 list :

[('1', '3:00 PM'), ('1', '3:00AM'), ('2', '1:00 AM'), ('2', '凌晨 2:00')]

srt_lst = sorted(lst, key=lambda val: (val[0], val[1]), reverse = True)

给出:[(2, '下午 2:00'), (2, '凌晨 2:00'), (2, '凌晨 1:00'), (1, '下午 3:00'), (1 , '凌晨 3:00')]

必需的是:

[(2, '2:00 AM'), (2, '2:00 PM'), (1, '3:00 AM'), (1, '3:00 PM') ]

最佳答案

否定第二个键:

lst = [(1,2), (3,2), (1,3), (3,4)]

print(sorted(lst,key=lambda x: (x[0],- x[1]),reverse=True))
[(3, 2), (3, 4), (1, 2), (1, 3)]

或第一个并删除反向:

print(sorted(lst,key=lambda x: -x[0])

[(3, 2), (3, 4), (1, 2), (1, 3)]

从最低到最高排序会将较低的第二个值放在第一位,但使用 -x[0] 会将较高的第一个元素放在第一位。

根据您的编辑,您需要将 x[0] 转换为 int 并将时间解析为 datetime 对象:

from datetime import datetime

lst = [('1', '3:00 PM'), ('1', '3:00 AM'), ('2', '1:00 AM'), ('2', '2:00 AM')]

print(sorted(lst,key=lambda x: (-int(x[0]), datetime.strptime(x[1], "%H:%M %p"))))
[('2', '1:00 AM'), ('2', '2:00 AM'), ('1', '3:00 PM'), ('1', '3:00 AM')]

关于python - 根据两个键排序,第一个降序排序,第二个升序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299430/

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