我想要在每条记录的两个字段上使用不区分大小写的记录(列表)元组。 HowTo/Sorting 告诉我如何不区分大小写 (key=str.lower),它告诉我如何对两个键进行排序 (key=operator.itemgetter(0,1) )。我尝试了以下方法:
parts = [
('A',2,''),
('a',1,''),
('b',2,''),
('B',1,''),
]
foo = sorted(parts, key=str.lower, key=operator.itemgetter(0,1))
print(foo)
Python 不喜欢同一个 sorted 中的两个 key=。它说:SyntaxError: keyword argument repeated,指向 key= 的第二个实例。
如何进行不区分大小写的排序,以及对多个字段进行排序?
请您参考如下方法:
您的代码的问题在于您两次传递相同的参数。这是不可能的。
它们是 sorted 的 key 参数期望一个函数。此函数获取可迭代对象的一个元素并返回可按照您想要的方式排序的内容。
通常,lambda functions (这意味着内联函数)被使用:
parts = [('A', 2, ''),
('a', 1, ''),
('b', 2, ''),
('B', 1, '')]
foo = sorted(parts, key=lambda s: (s[0].lower(), s[1]))
print(foo)
但您也可以创建一个“真正的”函数:
parts = [('A', 2, ''),
('a', 1, ''),
('b', 2, ''),
('B', 1, '')]
def my_sorting(element):
return (element[0].lower(), element[1])
bar = sorted(parts, key=my_sorting)
print(bar)
都给
[('a', 1, ''), ('A', 2, ''), ('B', 1, ''), ('b', 2, '')]
您还应该知道元组总是按元素排序的。这意味着,首先列表按所有元组的第一个元素排序。然后,对于与第一个元素具有相同排序键的元素,使用第二个元素,依此类推。
