2010-05-11 151 views
3

的名单上有以下列表:排序百分比

l = ['50%','12.5%','6.25%','25%'] 

,我想按以下顺序进行排序:

['6.25%','12.5%','25%','50%'] 

使用l.sort()产量:

['12.5%','25%','50%','6.25%'] 

任何很酷的技巧,在Python中轻松地排序这些列表?

+0

http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html – tanascius 2010-05-11 09:27:44

+4

将数据存储为数字而不是字符串! - 取决于您对数据做了什么但需要一次转换为输入数字和一次输出可能比几次转换成本低 – Mark 2010-05-11 09:36:05

回答

15

您可以用自定义键

b =['52.5%', '62.4%', '91.8%', '21.5%'] 
b.sort(key = lambda a: float(a[:-1])) 

这个度假胜地集排序,但在字符串中使用的数值为重点(即的“%”排骨和转换为浮动。

+0

这不适用于'6.25%'。你的意思是'int(a [: - 1])'吗? – 2010-05-11 09:28:46

+0

对不起。这些事情发生:) – 2010-05-11 09:29:57

+0

啊,很酷 - 它几乎工作我不得不做一个: b.sort(key = lambda a:float(str(a [: - 1]))) 为了使其功能完整。 – mortenvp 2010-05-11 09:30:46