我有一个名字和姓氏列表,如下所示:
[['ARNO', 'ANN'], ['GATES', 'SOPHIA'], ['KERN', 'AMBER'], ['KORN', 'JACOB'], ['STAN', 'EMILY'], ['STAN', 'ANNA'], ['THORENSEN', 'VICTORIA'], ['WAHL', 'ALEXIS']]
如图所示,姓氏按字母顺序排列,但在两个姓氏相同的人的情况下,没有按名字进行连接或二次排序。示例:(安娜和艾米丽·斯坦)。我如何在Python中实现这一点?
您可以利用sorted
方法(此处为文档)。基本上,如果你想先按姓氏排序,那么:
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])
正如官方文档所述,如果比较函数返回多个值的元组,则可以按多个标准设置排序。因此,您可以定义自己的排序键,它将返回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]))