如何不区分大小写地对 Python 中的二维列表进行排序?
How can I case-insensitive sort a 2D List in Python?
我有一个这样的二维列表:
mylist = [[1, "Banana", "description"],[2, "Peach", "description"],[1,"apple", "description"],[2, "orange", "description"]]
我想先按数字对列表进行排序,然后按对象的“名称”对列表进行排序。但是当我用 sorted(mylist)
排序时,我得到以下输出:
mylist=[[1, 'Banana', 'description'], [1, 'apple', 'description'], [2, 'Peach', 'description'], [2, 'orange', 'description']]
相反,我想要按名称进行不区分大小写的排序:
mylist = [[1, 'apple', 'description'], [1, 'Banana', 'description'], [2, 'orange', 'description'], [2, 'Peach', 'description']]
我尝试了密钥 key=str.casefold
但它不起作用,因为我收到以下错误消息:
TypeError: descriptor 'casefold' for 'str' objects doesn't apply to a 'list' object
传递给键的项目是 list
s。同时,一个键可以输出一个序列,例如 tuple
或 list
,正如您已经看到的那样,将按字典顺序进行比较。当您没有明确指定密钥时,就会发生这种情况。
所以一个键可以转换一个输入列表和return另一个列表:
sorted(mylist, key=lambda row: [row[0], row[1].casefold()])
是否要对键中每行的第三个元素执行任何操作由您决定。
我有一个这样的二维列表:
mylist = [[1, "Banana", "description"],[2, "Peach", "description"],[1,"apple", "description"],[2, "orange", "description"]]
我想先按数字对列表进行排序,然后按对象的“名称”对列表进行排序。但是当我用 sorted(mylist)
排序时,我得到以下输出:
mylist=[[1, 'Banana', 'description'], [1, 'apple', 'description'], [2, 'Peach', 'description'], [2, 'orange', 'description']]
相反,我想要按名称进行不区分大小写的排序:
mylist = [[1, 'apple', 'description'], [1, 'Banana', 'description'], [2, 'orange', 'description'], [2, 'Peach', 'description']]
我尝试了密钥 key=str.casefold
但它不起作用,因为我收到以下错误消息:
TypeError: descriptor 'casefold' for 'str' objects doesn't apply to a 'list' object
传递给键的项目是 list
s。同时,一个键可以输出一个序列,例如 tuple
或 list
,正如您已经看到的那样,将按字典顺序进行比较。当您没有明确指定密钥时,就会发生这种情况。
所以一个键可以转换一个输入列表和return另一个列表:
sorted(mylist, key=lambda row: [row[0], row[1].casefold()])
是否要对键中每行的第三个元素执行任何操作由您决定。