根据数字对混合字符串列表进行排序

ade*_*e1e 6 python

如何通过数值对此列表进行排序?是正则表达式需要删除数字还是有更多的Pythonic方法来做到这一点?

to_sort

['12-foo',
 '1-bar',
 '2-bar',
 'foo-11',
 'bar-3',
 'foo-4',
 'foobar-5',
 '6-foo',
 '7-bar']
Run Code Online (Sandbox Code Playgroud)

期望的输出如下:

1-bar
2-bar
bar-3
foo-4
foobar-5
6-foo
7-bar
foo-11
12-foo
Run Code Online (Sandbox Code Playgroud)

Mar*_*oun 10

一种解决方案是以下正则表达式提取:

sorted(l, key=lambda x: int(re.search('\d+', x).group(0)))
Run Code Online (Sandbox Code Playgroud)
>>> l
['12-foo', '1-bar', '2-bar', 'foo-11', 'bar-3', 'foo-4', 'foobar-5', '6-foo', '7-bar']
>>> sorted(l, key=lambda x: int(re.search('\d+', x).group(0)))
['1-bar', '2-bar', 'bar-3', 'foo-4', 'foobar-5', '6-foo', '7-bar', 'foo-11', '12-foo']
Run Code Online (Sandbox Code Playgroud)

key是所提取的数位(转换为int避免lexographically排序).