如何在保持姓氏排序结构的同时按名字排序(Python)?

  • 本文关键字:排序 Python 结构 python list sorting
  • 更新时间 :
  • 英文 :


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

[['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]))

最新更新