我想在每个记录的两个字段中使用不区分大小写的记录(列表)元组。 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不喜欢同一key=
中的两个sorted
。它说:SyntaxError: keyword argument repeated
,指向key=
的第二个实例。
如何获得不区分大小写的排序,并对多个字段进行排序?
答案 0 :(得分:9)
您的代码存在的问题是您传递了两次相同的参数。这是不可能的。
sorted
的key
参数需要一个函数。此函数获取iterable的一个元素,并返回可按您希望的方式排序的内容。
通常,使用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, '')]
您还应该知道元组总是逐个元素排序。这意味着,首先列表按所有元组的第一个元素排序。然后,对于对第一个元素具有相同排序关键字的元素,使用第二个元素等