【问题标题】:Python Sorting: Bad Operand Type for Unary -: 'str'Python 排序:一元的错误操作数类型 -: 'str'
【发布时间】:2021-04-18 00:19:31
【问题描述】:

到目前为止,我已经查看了有关此主题的几个问题,但似乎找不到答案。我的目标是按两个标准对元组的 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 函数可以进行这种排序。我究竟做错了什么?这可能吗?谢谢!

【问题讨论】:

    标签: python python-3.x sorting lambda tuples


    【解决方案1】:

    由于元组中的第一个值是一个数字,你可以取而代之否定它并给sortedreverse=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')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-17
      • 2014-01-02
      • 1970-01-01
      • 2013-03-28
      • 2017-11-21
      • 1970-01-01
      • 2021-01-15
      相关资源
      最近更新 更多