我想按照以下两个标准对列表进行排序:
我目前正在使用:
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
?
答案 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']