到目前为止,我已经复习了几个关于这个主题的问题,但我似乎找不到答案。我的目标是根据两个标准对元组的Python列表进行排序。下面的代码在问题标题(Python3)中抛出错误:
h = [(1, 'ghi'), (2, 'abc'), (2, 'def')]
print(sorted(h, key=lambda tup: (tup[0], -tup[1])))
这里的想法是首先按元组中的整数排序,然后按元组中字符串的反字母顺序对列表进行排序。我正在寻找像下面这样的输出。这也是我期望上面的代码行打印的内容,但我得到的却是TypeError: Bad Operand Type for Unary -: 'str'
[(1, 'ghi'), (2, 'def'), (2, 'abc')]
我知道我可以编写一个自定义的比较器来实现这一点,但是这个站点上的一些答案似乎表明,通过传递正确的lambda函数,这种排序是可能的。我做错了什么?这个是可能的吗?谢谢!
发布于 2021-04-18 08:22:29
由于元组中的第一个值是一个数字,因此您可以将其取反,并为sorted
提供reverse=True
标志;这将给出所需的效果,即按数字顺序对数字进行排序(对被否定的数字进行反向排序与对原始数字进行排序产生相同的结果),并按字母顺序对字符串进行反向排序。例如:
h = [(1, 'ghi'), (2, 'abc'), (2, 'def')]
print(sorted(h, key=lambda tup: (-tup[0], tup[1]), reverse=True))
输出:
[(1, 'ghi'), (2, 'def'), (2, 'abc')]
https://stackoverflow.com/questions/67144145
复制相似问题