2010-05-11 114 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