我有一个列表,其中包含元组列表,我想通过第二个元素对这些子列表进行排序,这是一个介于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?
答案 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'
答案 1 :(得分:0)
您希望它为float
data[i] = sorted(data[i], key=lambda x: float(x[1]), reverse=True)
答案 2 :(得分:0)
您的数据是字符,
>>> "10" < "7"
True
>>>
转换为浮点数,无论是在排序比较函数还是数据中,如果它是正确的位置。