一种方法是将sorted 与key 参数和自定义lambda 函数一起使用。
这里我们需要用.分割,取最后一项,转换成int。
lst = [u'TC DUMAZILE. Warning n.12', u'TC DUMAZILE. Warning n.4', u'TC DUMAZILE. Warning n.8', u'TC ELEVEN. Warning n.1', u'TC ELIAKIM. Warning n.10', u'TC ELIAKIM. Warning n.14', u'TC ELIAKIM. Warning n.2', u'TC ELIAKIM. Warning n.6', u'TC HOLA. Warning n.4', u'TC HOLA. Warning n.8', u'TC TWELVE. Warning n.1']
res = sorted(lst, key=lambda x: int(x.rsplit('.', 1)[-1]))
# ['TC ELEVEN. Warning n.1',
# 'TC TWELVE. Warning n.1',
# 'TC ELIAKIM. Warning n.2',
# 'TC DUMAZILE. Warning n.4',
# 'TC HOLA. Warning n.4',
# 'TC ELIAKIM. Warning n.6',
# 'TC DUMAZILE. Warning n.8',
# 'TC HOLA. Warning n.8',
# 'TC ELIAKIM. Warning n.10',
# 'TC DUMAZILE. Warning n.12',
# 'TC ELIAKIM. Warning n.14']
如果需要先按整数排序,再按字符串开头部分的字母顺序:
def sorter_func(x):
y = x.split('.')
return int(y[-1]), y[0]
res = sorted(lst, key=sorter_func)
# ['TC ELEVEN. Warning n.1',
# 'TC TWELVE. Warning n.1',
# 'TC ELIAKIM. Warning n.2',
# 'TC DUMAZILE. Warning n.4',
# 'TC HOLA. Warning n.4',
# 'TC ELIAKIM. Warning n.6',
# 'TC DUMAZILE. Warning n.8',
# 'TC HOLA. Warning n.8',
# 'TC ELIAKIM. Warning n.10',
# 'TC DUMAZILE. Warning n.12',
# 'TC ELIAKIM. Warning n.14']
相关:Nested lambda statements when sorting lists