在python中按两个值排序.一个上升,一个下降



有字典:

{'david': ['APP', 2], 'ala': ['PROD', 2], 'steven': ['DEV', 4], 'katya': ['SYS', 2]}

我想排序的优先级是列表的第二个元素(降序),然后是列表的第一个元素(升序)。我想要的输出是:

>>> [('steven', ['DEV', 4]), ('david': ['APP', 2]), ('ala': ['PROD', 2]), ('katya': ['SYS', 2])]

我最好的主意:

x = sorted(x.items(), key=lambda elem: elem[1][1], reverse=True)
x.sort(key=lambda elem: elem[1][0])
>>> [('david', ['APP', 2]), ('steven', ['DEV', 4]), ('ala', ['PROD', 2]), ('katya', ['SYS', 2])]

核心python是否有任何函数或方法可以考虑对具有优先级的相同对象进行排序,在我的情况下,如果数字(数字按降序排序)相等,则查看'APP', 'DEV'等字符串…然后按字符串升序排序?

使用说明:

data = {'david': ['APP', 2], 'ala': ['PROD', 2], 'steven': ['DEV', 4], 'katya': ['SYS', 2]}

res = sorted(data.items(), key=lambda x: (x[1][1] * -1, x[1][0]))
print(res)

[('steven', ['DEV', 4]), ('david', ['APP', 2]), ('ala', ['PROD', 2]), ('katya', ['SYS', 2])]

乘以-1将使排序从第二个元素降序进行。

最新更新