2016-12-29 165 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 
>>> 

转换为浮动,无论是在您的排序比较函数或在您的数据,如果这就是它的正确的地方。