在python中智能排序

时间:2013-09-11 11:28:01

标签: python sorting lambda

我试图在列表中对具有混合性质字段的元组进行排序:LABEL.NUMBER。例如:

 aaaa.143
 aadf.23
 aaaa.8
 ..

所以,我想先将LABEL排序为字符串,并将NUMBER作为数字排序,即排序之后应该来:

 aaaa.8
 aaaa.143
 aadf.23
 ..

我现在有以下内容:

for i in sorted(v_distribution.items(), key=lambda x: x[0]): 

使用整个字段作为字符串排序,所以我得到:

 aaaa.143
 aaaa.8
 aadf.23
 ..

我应该如何修改lambda函数来执行任务?

2 个答案:

答案 0 :(得分:2)

类似的东西:

>>> s = ['aaaa.143', 'aadf.23', 'aaaa.8']
>>> def key_f(x):
...     head, tail = x.split('.', 1)
...     return (head, int(tail))
...
>>> sorted(s, key=key_f)
['aaaa.8', 'aaaa.143', 'aadf.23']

尽管可以使用lambda完成此操作,但最好将密钥计算分成单独的函数。

答案 1 :(得分:1)

您可以使用lambda执行此操作:

for i in sorted(v_distribution.items(), key=lambda x: (x.split('.', 1)[0], int(x.split('.', 1)[1]):