2011-12-10 83 views
0

指數排序列我創建mylist讀出:包含在python

[('GCK', '3e-12'), ('ist', '6e-30'), ('iso', '5e-15'), ('tig', '5e-77')] 

當我運行的排序功能:

mylist.sort(key=operator.itemgetter(1)) 

它排序的第2列名單,但只能通過第一整數

[('GCKDGN101ANI4S', '3e-12'), ('isotig13037', '5e-15'), ('isotig14607', '5e-77'), ('isotig03156', '6e-30')] 

我如何得到它在第二列中的整個數量排序使順序是:

[('GCK', '3e-12'), ('ist', '5e-15'), ('tig', '6e-30'), ('iso', '5e-77')] 

回答

4

'3e-12'不是一個數字,它是一個字符串。字符串按每個字母排序。

你想排序數字,所以你必須先轉換它們。無論是在原始數據:

old = [('GCK', '3e-12'), ('ist', '6e-30'), ('iso', '5e-15'), ('tig', '5e-77')] 
new = [(name, float(x)) for name,x in old] 
new.sort(key=operator.itemgetter(1)) 
分揀過程中

或轉換的項目:

old.sort(key=lambda elem: float(elem[1])) 
+0

謝謝你的解釋! – EWC

1
>>> l = [('GCK', '3e-12'), ('ist', '6e-30'), ('iso', '5e-15'), ('tig', '5e-77')] 
>>> sorted(l, key=lambda x: float(x[1]), reverse=True) 
[('GCK', '3e-12'), ('iso', '5e-15'), ('ist', '6e-30'), ('tig', '5e-77')] 
1

你只需要添加浮充轉換:

>>> mylist.sort(key=lambda x:float(x[1]), reverse=True) 
>>> mylist 
[('GCK', '3e-12'), ('iso', '5e-15'), ('ist', '6e-30'), ('tig', '5e-77')] 
1

你可以先字符串轉換爲數字。

import operator 

a = [('GCKDGN101ANI4S', '3e-12'), ('isotig13037', '5e-15'), ('isotig14607', '5e-77'), ('isotig03156', '6e-30')] 
converted_a = [ (row[0],float(row[1])) for row in a ] 
converted_a.sort(key=operator.itemgetter(1), reverse=True) 

print converted_a