2010-12-02 19 views
14

我知道tat類似的問題已被問幾次。我現在如何使用搜索功能,但它仍然無法正常工作。python排序列表與鑄造

所以這裏是問題設置。我有一個包含字符串的列表列表。一列包含實際表示浮點值的字符串。這也是我想要排序的列。問題是,Python似乎忽略了 - (減號)條目標誌。所以示例清單:

[[blaa, '0.3', bli], [bla, '0.1', blub], [bla, '-0.2', blub]] 

被排序是這樣的:

[[bla, '0.1', blub], [bla, '-0.2', blub], [blaa, '0.3', bli]] 

,而不是如何它應該是:

[[bla, '-0.2', blub],[bla, '0.1', blub], [blaa, '0.3', bli]] 

到目前爲止,我曾嘗試:

  • 鑄造第二列以浮動 並按該列

,如:

for i in mylist: 
    i[1] = float(i[1])  

mylist.sort(key=lambda x: x[1]) 

for i in mylist: 
    i[1] = float(i[1]) 

mylist.sort(key=operator.itemgetter(1)) 
  • 我也試圖定義自己的比較 功能:

,如:

mylist.sort(cmp=lambda x,y: cmp(float(x), float(y)), key=operator.itemgetter(1)) 

和上述方法的任何其他組合,也與sorted相同。到目前爲止,沒有成功,每次都會忽略負號。如何解決這個問題?

也已經嘗試了伊格納西奧的建議。我應該提到我必須使用python 2.5。

+0

所以這可能是環境問題。檢查你的python版本。 – Kabie 2010-12-02 09:27:45

+0

如果你認爲某些東西是字符串,那麼你應該把引號當作是考慮可能想要運行你的代碼的人。 – aaronasterling 2010-12-02 09:27:50

+2

你有多確定他們都是字符串? – 2010-12-02 09:29:22

回答

18
l = [["blaa", "0.3", "bli"], ["bla", "0.1", "blub"], ["bla", "-0.2", "blub"]] 

l.sort(key=lambda x: float(x[1])) 

>>> [['bla', '-0.2', 'blub'], ['bla', '0.1', 'blub'], ['blaa', '0.3', 'bli']] 
2

煤礦工作正常,Python的3.1.2:

>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']] 
>>> sorted(l,key=lambda x:float(x[1])) 
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']] 

和2.6.5:

>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']] 
>>> sorted(l,key=lambda x:float(x[1])) 
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']]