3

我正在尝试对列表中具有混合性质字段的元组进行排序: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 函数来完成任务?

4

2 回答 2

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,但最好将密钥计算分离到单独的函数中。

于 2013-09-11T11:35:13.817 回答
1

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

for i in sorted(v_distribution.items(), key=lambda x: (x.split('.', 1)[0], int(x.split('.', 1)[1]):
于 2013-09-11T11:42:09.307 回答