Python:按不区分大小写的字母顺序对元组列表进行排序

标签 python list sorting

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

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

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

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

给予

[('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))

但这一定是 Python 2 的东西,因为

SyntaxError: invalid syntax

...首先(

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

最佳答案

你说得对,这是 Python 2 的问题,但修复非常简单:

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

这看起来并没有那么清楚,因为名称 ab 没有比 a[0]< 更多的内在含义a[1]。 (如果他们是,比方说,namescore 之类的东西,那可能就是另一回事了……)


Python 2 允许您将函数参数解包为元组。这在一些简单的情况下有效(有时很方便),但有很多问题。参见 PEP 3113为什么它被删除。

处理此问题的规范方法是仅拆分函数内的值,这在 lambda 中不太适用。但是,您是否有理由不能不按规定定义函数?

def twoplekey(ab):
    a, b = ab
    return a.lower(), b

list.sort(key=twoplekey)

作为旁注,您真的不应该将您的列表称为 list;隐藏了 list 类型,所以你不能再使用它(例如,如果你想通过编写 list(tup) 将元组转换为列表,你将尝试调用您的列表,并得到一个莫名其妙的错误)。

关于Python:按不区分大小写的字母顺序对元组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043709/

相关文章:

Python:解析关键字之间的文本

python - 我应该如何从 python 列表中获取对?

python - 在 python 的 string.format() 中使用数组

外部范围内的列表过滤器 - KOTLIN

C动态数组内存分配、填充和排序

python - 如何将参数化的sql查询放入变量然后在Python中执行?

python - 双装饰器,为什么我的封闭函数之一没有执行?

python - 递归循环时的组列表

c# - 在 c# winforms 中填充 TreeView 后对 TreeView 的子节点进行排序

c - 如何根据每行末尾的值对文件行进行排序