如何在保持姓氏的排序结构不变的情况下按名字排序(Python)?

2024-05-13 23:20:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名字和姓氏列表,如下所示:

[['ARNO', 'ANN'], ['GATES', 'SOPHIA'], ['KERN', 'AMBER'], ['KORN', 'JACOB'], ['STAN', 'EMILY'], ['STAN', 'ANNA'], ['THORENSEN', 'VICTORIA'], ['WAHL', 'ALEXIS']]

如图所示,姓氏是按字母顺序排列的,但如果两个人的姓氏相同,则没有按名字进行连接或二次排序。示例:(安娜和艾米丽·斯坦)。如何在Python中实现这一点


Tags: 列表名字jacobamberann姓氏annastan
2条回答

正如official documentation所述,如果比较函数返回多个值的元组,则可以设置按多个标准排序。因此,您可以定义自己的排序键,它将返回2个值,如(name, surname)。这样,name将用作主要排序标准,surname-次要排序标准。您的自定义排序键可能如下所示:

def custom_key(person: list) -> Tuple[str, str]:
    return (person[1], person[0])
# OR
custom_key = lambda person: (person[1], person[0])

应该这样使用:

sorted(people, key=custom_key)
# OR
sorted(people, key=lambda person: (person[1], person[0]))

您可以利用sorted方法(docshere)。 基本上,如果您希望您的列表先按姓氏排序,然后:

x = [['ARNO', 'ANN'], ['GATES', 'SOPHIA'], ['KERN', 'AMBER'], ['KORN', 'JACOB'], ['STAN', 'EMILY'], ['STAN', 'ANNA'], ['THORENSEN', 'VICTORIA'], ['WAHL', 'ALEXIS']]    
sorted_list = sorted(x, key=lambda names: names[1])

如果要按名字排序,则:

x = [['ARNO', 'ANN'], ['GATES', 'SOPHIA'], ['KERN', 'AMBER'], ['KORN', 'JACOB'], ['STAN', 'EMILY'], ['STAN', 'ANNA'], ['THORENSEN', 'VICTORIA'], ['WAHL', 'ALEXIS']]    
sorted_list = sorted(x, key=lambda names: names[0])

相关问题 更多 >