Python如何按末尾浮点数降序排序标准输出并保留格式?
按末尾浮点数降序排序标准输出内容的简便方法
首先,先看你给出的待排序标准输出内容:
seventy-five 0.050 states 0.719 drainage-basin 0.037 scotland 0.037 reading 0.123 thirty-eight 0.000 almost 0.037 rhine 0.000 proper 0.037 contrary 0.087
作为Python新手,你完全不用提前把整个内容转成复杂列表再排序,不管是用Python脚本还是命令行工具,都能轻松搞定,而且完美保留原格式!
方法一:Python脚本处理(更贴合Python场景)
这个脚本直接读取标准输入,用生成器分组(不用一次性加载所有数据到内存),按浮点数降序排序后输出:
import sys # 读取标准输入的所有内容,按空格拆分 elements = sys.stdin.read().split() # 用生成器按「词+浮点数」分组,转成(浮点数, 词)的元组方便排序 groups = ((float(elements[i+1]), elements[i]) for i in range(0, len(elements), 2)) # 按浮点数降序排序 sorted_groups = sorted(groups, key=lambda x: -x[0]) # 按原格式拼接输出 output = " ".join(f"{word} {num:.3f}" for num, word in sorted_groups) print(output)
使用方法:把脚本保存为sort_output.py,然后通过管道把你的标准输出内容传给它:
echo "seventy-five 0.050 states 0.719 drainage-basin 0.037 scotland 0.037 reading 0.123 thirty-eight 0.000 almost 0.037 rhine 0.000 proper 0.037 contrary 0.087" | python sort_output.py
运行后会输出排序后的结果:
states 0.719 reading 0.123 contrary 0.087 seventy-five 0.050 drainage-basin 0.037 scotland 0.037 almost 0.037 proper 0.037 thirty-eight 0.000 rhine 0.000
方法二:命令行工具快速处理(无需写Python脚本)
如果不想写脚本,用awk+sort组合命令就能直接搞定,一行命令就行:
echo "seventy-five 0.050 states 0.719 drainage-basin 0.037 scotland 0.037 reading 0.123 thirty-eight 0.000 almost 0.037 rhine 0.000 proper 0.037 contrary 0.087" | awk '{for(i=1;i<=NF;i+=2) print $(i+1), $i}' | sort -nr | awk '{print $2, $1}' | tr '\n' ' '
简单解释下这个命令的逻辑:
- 用
awk把每组的「浮点数+词」调换位置输出,方便按数字排序 sort -nr按浮点数降序排序- 再用
awk把位置调换回「词+浮点数」 tr '\n' ' '把换行符换成空格,还原成原输出格式
内容的提问来源于stack exchange,提问作者Jim Ye
相关产品推荐
相关产品推荐

