无法对列表列表进行排序

时间:2016-12-29 12:25:06

标签: python python-2.7 sorting

我有一个列表,其中包含元组列表,我想通过第二个元素对这些子列表进行排序,这是一个介于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.0的元素。

为什么它不排序那条线,而是所有其他线?是因为它有两次7.5?

3 个答案:

答案 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

答案 1 :(得分:0)

您希望它为float

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

答案 2 :(得分:0)

您的数据是字符,

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

转换为浮点数,无论是在排序比较函数还是数据中,如果它是正确的位置。