Python 使用两个键进行排序=参数
我想要一个不区分大小写的记录(列表)元组,每个记录中有两个字段。HowTo/Sorting告诉我如何不区分大小写(Python 使用两个键进行排序=参数,python,sorting,Python,Sorting,我想要一个不区分大小写的记录(列表)元组,每个记录中有两个字段。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.
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=
s。它说:SyntaxError:keyword参数重复
,指向key=
的第二个实例
如何获得不区分大小写的排序,以及对多个字段进行排序?代码的问题是,同一个参数要传递两次。这是不可能的
它们是函数的键
参数。此函数获取iterable的一个元素,并返回按您所需的方式可排序的内容
通常使用(即内联函数):
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, '')]
您还应该知道元组总是按元素排序的。这意味着,首先列表按所有元组的第一个元素排序。然后,对于第一个元素具有相同排序键的元素,将使用第二个元素,以此类推。正确,您不能在函数调用中传递具有两个不同值的相同函数参数。您只能使用一个排序键,因此您需要一个lambdata尝试在此处使用itemgetter
,key=lambda x:operator.itemgetter(0)(x) .lower()
是我能想到的唯一方法。非常感谢您提供的两种解决方案,以及您如此快速的回复!