如何通过子列表中的浮动对象对列表列表进行排序

时间:2019-10-22 10:23:39

标签: python python-3.x

我试图按1个浮点数对列表列表进行排序。 问题是,使用sort(list,itemgetter(n))将浮点数作为字符串排序,并且输出不是我期望的。

list1 = [('1','1',"9999"),('1','1',"9998"),('1','1',"9998.777"),('1','1',"9995111"),('1','1',"110000")]

list2 = sorted(list2, key=itemgetter(2))

print(list2)

实际结果:

[('1', '1', '110000'), ('1', '1', '9995111'), ('1', '1', '9998'), ('1', '1', '9998.777'), ('1', '1', '9999')]

预期结果:

[('1', '1', '9998'), ('1', '1', '9998.777'), ('1', '1', '9999'),('1', '1', '110000'),('1', '1', '9995111')]

2 个答案:

答案 0 :(得分:3)

它将它们归类为字符串,因为它们是字符串。 itemgetter照原样返回x[2]。您需要一个带x并返回float(x[2])的函数。因此,只需使用key= lambda x: float(x[2])

答案 1 :(得分:0)

如果要进行浮点转换,可以在其上映射一个函数:

list2 = list(map(lambda x: (x[0], x[1], float(x[2])), list1))

然后您的行list2 = sorted(list1, key=itemgetter(2))将按预期工作。

否则,您可以使用sorted(list1, key=lambda x: float(x[2]))(如评论中提到的Rakesh)来按其上的第2个元素转换浮点类型进行排序。