python - lambda排序列表奇怪的行为

标签 python list sorting

当我按列表(元组)中的第一个和第二个元素排序时,它有效,但按第三个元素排序不再有效 输入:

mylist=[('11', '82075.36', '8.15'), ('16', '82073.78', '12.92'),   ('13', '62077.99', '17.89'),]

请求:

print(sorted(mylist, key=lambda val: val[0]))
print(sorted(mylist, key=lambda val: val[1]))
print(sorted(mylist, key=lambda val: val[2]))

和输出:

[('11', '82075.36', '8.15'), ('13', '62077.99', '17.89'), ('16', '82073.78', '12.92')] # it is OK
<小时/>
[('13', '62077.99', '17.89'), ('16', '82073.78', '12.92'), ('11',  '82075.36', '8.15')] # it is OK`
<小时/>
[('16', '82073.78', '12.92'), ('13', '62077.99', '17.89'), ('11', '82075.36', '8.15')] # this seems to be not correct, can anybody explain why?

如果我从第三个 elm 中删除引号,它就可以工作,无论如何,对于 elm 1 来说,它可以在不删除引号的情况下工作

mylist=[('11', '82075.36', 8.15), ('16', '82073.78', 12.92), ('13', '62077.99', 17.89),]

和输出:

[('11', '82075.36', 8.15), ('16', '82073.78', 12.92), ('13', '62077.99', 17.89)]

最佳答案

您要求对字符串进行排序,因此您正在进行字符串排序。试试这个:

print(sorted(mylist, key=lambda val: int(val[0])))
print(sorted(mylist, key=lambda val: float(val[1])))
print(sorted(mylist, key=lambda val: float(val[2])))

即将排序键更改为数字。

关于python - lambda排序列表奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35245850/

相关文章:

python - 在类初始化时使用数组中的变量定义函数

python - 按链接名称对链接列表进行排序

java - 对具有内存限制的大文件进行排序 - 外部排序

c++ - 我们在 std::map 或 std::set 中有什么样的排序?

python - 如何使 PyMe(Python 库)在 Windows 上的 Python 2.4 中运行?

python - Pandas 数据帧中任意两连续行之间的列差异比率的平均值

python - 在嵌套的 python 字典和列表中查找目标值的路径

python绝对XPath返回空列表,通用查询更好吗?

python - 如何在 Pandas 中添加排序功能?

python - 将单引号字典转换为有效的 json