排序条件 - 已排序()

时间:2015-05-30 22:17:43

标签: python sorting

我想按照以下两个标准对列表进行排序:

  1. 数字顺序;然后
  2. 按字母顺序排列。
  3. 我目前正在使用:

    from re import search
    my_list = ['nelsonfreire87956423', 'martha34685128', 'gleen34685128', 'polini13452678']
    
    first_sort = sorted(my_list, key=lambda x: [x])
    
    sorted_list = sorted(
        first_sort, 
        key=lambda x: search(r'\d{8}', x).group() if search(r'\d{8}', x) else []
    )
    print(sorted_list)
    

    这给出了期望的结果:

    ['polini13452678', 'gleen34685128', 'martha34685128', 'nelsonfreire87956423']
    

    我想知道如何通过一次 sorted调用对此列表进行排序。我的意思是,如何将多个条件传递给sorted

1 个答案:

答案 0 :(得分:1)

您的key函数可以返回一个元组,其中元组中每个位置的元素用于断开与前一个位置元素的联系。例如:

def my_key(s):
    name, num = search(r'(\D+)(\d+)', s).groups()
    return int(num), name

导致:

>>> my_key('nelsonfreire87956423')
(87956423, 'nelsonfreire')  # i.e. sort on number first, then name

因此:

>>> sorted(my_list, key=my_key)
['polini13452678', 'gleen34685128', 'martha34685128', 'nelsonfreire87956423']