示例list的代码:
lst = ['b-3', 'a-2', 'c-4', 'd-2'] # result: # ['a-2', 'd-2', 'b-3', 'c-4']
1、使用enumerate()和reversed()实现排序
sorted(lst,key = lambda s : [x if i else int(x) for i,x in enumerate(reversed(s.split("-")))])
2、使用zip()和reversed()实现排序
lst = ['b-3', 'a-2', 'c-4', 'd-2'] res = sorted(lst, key=lambda x: tuple(f(a) for f, a in zip((int, str), reversed(x.split('-'))))) # 或者 res = sorted(lst, key=lambda x: (lambda y: (int(y[1]), y[0]))(x.split('-'))) print(res) ['a-2', 'd-2', 'b-3', 'c-4']
3、使用toolz实现排序
from toolz import compose res = sorted(lst, key=compose(lambda x: (int(x[1]), x[0]), lambda x: x.split('-')))
相关文档:https://toolz.readthedocs.io/en/latest/
4、使用for实现排序
# 用list >>> sorted(lst, key=lambda x: [(int(num), text) for text, num in [x.split('-')]]) ['a-2', 'd-2', 'b-3', 'c-4'] # 使用next() >>> sorted(lst, key=lambda x: next((int(num), text) for text, num in [x.split('-')])) ['a-2', 'd-2', 'b-3', 'c-4']