Python排序:一元的错误操作数类型-:'str'

到目前为止,我已经查看了有关该主题的几个问题,但似乎找不到答案。我的目标是按两个标准对 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')]
[(1, 'ghi'), (2, 'def'), (2, 'abc')]

我知道我可以编写一个自定义比较器来实现这一点,但是这个站点上的几个答案似乎表明通过传递正确的 lambda 函数可以进行这种排序。我究竟做错了什么?这可能吗?谢谢!

回答

由于在元组中的第一个值是一个数字,你可以否定,与其并给予sortedreverse=True标志:

h = [(1, 'ghi'), (2, 'abc'), (2, 'def')]
print(sorted(h, key=lambda tup: (-tup[0], tup[1]), reverse=True))

输出:


以上是Python排序:一元的错误操作数类型-:'str'的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>