Python 按2个键排序,但仅反转第一个键

Python 按2个键排序,但仅反转第一个键,python,python-3.x,Python,Python 3.x,再问一次,因为我的问题在我更新之前就结束了 这是按两个键进行的标准排序,它会反转两个键的结果 s = sorted(s, key = lambda x: (x['date'], x['id']), reverse=True) 但是,如何只对第一个键执行反向操作,如果需要按第二个键进行排序,它应该在不进行反向操作的情况下进行排序 现在输出 ID DATE 1282 2019-12-19 12:09:28 1281 2019-12-19 12:09:28 1280 2019-12-19 12

再问一次,因为我的问题在我更新之前就结束了

这是按两个键进行的标准排序,它会反转两个键的结果

s = sorted(s, key = lambda x: (x['date'], x['id']), reverse=True)
但是,如何只对第一个键执行反向操作,如果需要按第二个键进行排序,它应该在不进行反向操作的情况下进行排序

现在输出

ID DATE 
1282 2019-12-19 12:09:28 
1281 2019-12-19 12:09:28 
1280 2019-12-19 12:09:28 
1279 2019-12-19 12:09:27 
1278 2019-12-19 12:09:27 
1277 2019-12-19 12:09:27 
1275 2019-12-19 12:09:27

Desired output

1280 2019-12-19 12:09:28 
1281 2019-12-19 12:09:28 
1282 2019-12-19 12:09:28 
1275 2019-12-19 12:09:27 
1277 2019-12-19 12:09:27 
1278 2019-12-19 12:09:27 
1279 2019-12-19 12:09:27

假设您的字段存储为字符串,但只包含仅包含数字的ID。然后,您可以通过将id转换为int来进行就地排序,这不会改变数据的基本类型,只是为了确定排序顺序

data=“”1282 2019-12-19 12:09:28
1281 2019-12-19 12:09:28 
1280 2019-12-19 12:09:28 
1279 2019-12-19 12:09:27 
1278 2019-12-19 12:09:27 
1277 2019-12-19 12:09:27 
1275 2019-12-19 12:09:27"""
s=[]
对于数据中的行。拆分行():
ID,*date=line.split()
s、 附加((ID,“.join(date)))
打印(“##########之前”)
对于s中的项目:
打印(项目[0],项目[1])
s、 排序(key=lambda x:(x[1],-int(x[0]),reverse=True)
打印(“###########”之后)
对于s中的项目:
打印(项目[0],项目[1])
打印(f'type of{s[0][0]}仍然是{type(s[0][0])})
输出

###BEFORE###
1282 2019-12-19 12:09:28
1281 2019-12-19 12:09:28
1280 2019-12-19 12:09:28
1279 2019-12-19 12:09:27
1278 2019-12-19 12:09:27
1277 2019-12-19 12:09:27
1275 2019-12-19 12:09:27
###AFTER###
1280 2019-12-19 12:09:28
1281 2019-12-19 12:09:28
1282 2019-12-19 12:09:28
1275 2019-12-19 12:09:27
1277 2019-12-19 12:09:27
1278 2019-12-19 12:09:27
1279 2019-12-19 12:09:27
type of 1280 is still <class 'str'>
####之前###
1282 2019-12-19 12:09:28
1281 2019-12-19 12:09:28
1280 2019-12-19 12:09:28
1279 2019-12-19 12:09:27
1278 2019-12-19 12:09:27
1277 2019-12-19 12:09:27
1275 2019-12-19 12:09:27
###之后###
1280 2019-12-19 12:09:28
1281 2019-12-19 12:09:28
1282 2019-12-19 12:09:28
1275 2019-12-19 12:09:27
1277 2019-12-19 12:09:27
1278 2019-12-19 12:09:27
1279 2019-12-19 12:09:27
1280型仍在使用中

如果id字段是一个int,只需在排序中给它加一个减号即可
s=sorted(s,key=lambda x:-x['date'],-x['id'],-x['id'],-reverse=True)
如果它不是int,则在排序中转换为`s=sorted(s,key=lambda x:(x['date'],-int(x['id']),reverse=True)@ChrisDoyle无法将其转换为int。我不想详细说明,但这是不可能的。还有其他解决方案吗?为什么不能在排序中将其转换为int,因为它不会更改列表中值的基本类型