Pra*_*ord 2 python sorting python-2.7
我有一个元组列表:
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)]
但我正在寻找的列表是
[(3, 2), (3, 4), (1, 2), (1, 3)]
编辑
道歉,我已经提供了所有需要的信息!!!!
请考虑一下,作为我的清单:
[('1', '3:00 PM'), ('1', '3:00AM'), ('2', '1:00 AM'), ('2', '2:00 AM')]
srt_lst = sorted(lst, key=lambda val: (val[0], val[1]), reverse = True)
得到:
[(2, '2:00 PM'), (2, '2:00 AM'), (2, '1:00 AM'), (1, '3:00 PM'), (1, '3:00 AM')]
要求是:
[(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)]
Run Code Online (Sandbox Code Playgroud)
或者第一个并删除相反的:
print(sorted(lst,key=lambda x: -x[0])
[(3, 2), (3, 4), (1, 2), (1, 3)]
Run Code Online (Sandbox Code Playgroud)
从最低到最高排序将使较低的第二个值首先使用,但是使用-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')]
Run Code Online (Sandbox Code Playgroud)