我试图按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')]
答案 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个元素转换浮点类型进行排序。