排序条件排序()

2024-10-03 04:28:22 发布

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

我想按以下两个条件对列表进行排序:

  1. 数字顺序;然后
  2. 按字母顺序。你知道吗

我目前正在使用:

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?你知道吗


Tags: key列表search排序顺序my条件sort
1条回答
网友
1楼 · 发布于 2024-10-03 04:28:22

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

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

相关问题 更多 >