2016-12-29 168 views
0

我有一個列表,其中包含元組列表,我想按第二個元素排序這些子列表,它是介於0.0和10.0之間的數字。無法對列表進行排序

for i in range(0, len(data)): 
    data[i] = sorted(data[i], key=itemgetter(1), reverse=True) 

它全部整理如我所料,但一個元素是不是這就是:

<type 'list'>: [('String1', '7.5', '', '', None), ('String2', '7.5', '', '', None), ('String3', '10.0', '', '', None)]

這個清單是喜歡它的上面,即使它應該具有的元素,用10.0g前面。

爲什麼它不排序該行,但所有其他?是因爲它有7.5次嗎?

+4

請注意,'7.5'> '10.0'的輸出與'7.5> 10.0'的輸出不同...... – jonrsharpe

+0

你的原始數據是什麼樣的?你想得到什麼? –

回答

1

您需要爲float不是str

>>> sorted(data[i], key=lambda j: float(j[1]), reverse=True) 
[('String3', '10.0', '', '', None), ('String1', '7.5', '', '', None), ('String2', '7.5', '', '', None)] 

否則書面你是比較字符串值進行排序

'7.5' > '10.0' 

這是lexicographical comparison

0

你想把它當作float

data[i] = sorted(data[i], key=lambda x: float(x[1]), reverse=True) 
0

你的數據是字符,

>>> "10" < "7" 
True 
>>> 

轉換爲浮動,無論是在您的排序比較函數或在您的數據,如果這就是它的正確的地方。