Python:在alpha不区分大小写的ord上排序元组列表

2024-07-08 07:34:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表(“twoples”)

[('aaa',2), ('BBB',7), ('ccc',0)]

我需要按这个顺序打印,但是

^{pr2}$

给予

[('BBB', 7), ('aaa', 2), ('ccc', 0)]

list.sort(key=str.tolower)

不起作用(显然),因为

AttributeError: type object 'str' has no attribute 'tolower'

我不想更改列表中的字符串。在

另一个回答

list.sort(key=lambda (a, b): (a.lower(), b))

但那一定是python2的东西,因为

SyntaxError: invalid syntax

。。。一开始(

itemgetter()没有帮助,因为只允许一个“key”


Tags: key列表顺序typesortlist元组attributeerror
2条回答

以下内容在Python 3中起作用:

>>> my_list = [('aaa',2), ('BBB',7), ('ccc',0)]
>>> my_list.sort(key=lambda elem: elem[0].lower())
>>> print(my_list)
[('aaa', 2), ('BBB', 7), ('ccc', 0)]

函数参数解包在Python3中不起作用(正如您所发现的),但是从问题的措辞来看,您似乎只关心每个元组的第一个元素(elem[0])的比较。本例集中于此,并忽略第二个元素(elem[1])。在

您是对的,这是一个Python 2的东西,但修复非常简单:

list.sort(key=lambda a: (a[0].lower(), a[1]))

这看起来并不那么清楚,因为名称a和{}没有比a[0]和{}更多的内在含义。(如果他们是name和{}或其他什么,那可能是另一个故事…)


Python2允许您将函数参数解压为元组。这种方法在一些简单的情况下有效(有时也很方便),但也有很多问题。请参见PEP 3113了解它被删除的原因。在

处理此问题的标准方法是在函数内部拆分值,这在lambda中不太有效。但是,有什么原因不能把函数定义得越界呢?在

^{pr2}$

作为一个补充说明,你真的不应该调用你的list list;它隐藏了list类型,所以你不能再使用它了(例如,如果你想通过写list(tup)将元组转换为列表,那么你将尝试调用你的列表,并得到一个令人困惑的错误)。在

相关问题 更多 >

    热门问题