首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python排序:一元-的操作数类型错误:'str‘

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

Stack Overflow用户
提问于 2021-04-18 08:19:31
回答 1查看 203关注 0票数 2

到目前为止,我已经复习了几个关于这个主题的问题,但我似乎找不到答案。我的目标是根据两个标准对元组的Python列表进行排序。下面的代码在问题标题(Python3)中抛出错误:

代码语言:javascript
运行
复制
h = [(1, 'ghi'), (2, 'abc'), (2, 'def')]
print(sorted(h, key=lambda tup: (tup[0], -tup[1])))

这里的想法是首先按元组中的整数排序,然后按元组中字符串的反字母顺序对列表进行排序。我正在寻找像下面这样的输出。这也是我期望上面的代码行打印的内容,但我得到的却是TypeError: Bad Operand Type for Unary -: 'str'

代码语言:javascript
运行
复制
[(1, 'ghi'), (2, 'def'), (2, 'abc')]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-18 08:22:29

由于元组中的第一个值是一个数字,因此您可以将其取反,并为sorted提供reverse=True标志;这将给出所需的效果,即按数字顺序对数字进行排序(对被否定的数字进行反向排序与对原始数字进行排序产生相同的结果),并按字母顺序对字符串进行反向排序。例如:

代码语言:javascript
运行
复制
h = [(1, 'ghi'), (2, 'abc'), (2, 'def')]
print(sorted(h, key=lambda tup: (-tup[0], tup[1]), reverse=True))

输出:

代码语言:javascript
运行
复制
[(1, 'ghi'), (2, 'def'), (2, 'abc')]
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67144145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档