Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用两个键进行排序=参数_Python_Sorting - Fatal编程技术网

Python 使用两个键进行排序=参数

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.

我想要一个不区分大小写的记录(列表)元组,每个记录中有两个字段。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=
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()
是我能想到的唯一方法。非常感谢您提供的两种解决方案,以及您如此快速的回复!