Skip to main content
 首页 » 编程设计

python之如何按从高到低对字母数字列表进行排序(Python)

2025年05月04日14emanlee

在我的程序中,Python 打开一个 CSV Excel 文件并读取它。该文件包含字母数字数据,在 Excel 文件中分为三个不同的单元格。然后程序将数据制成列表。

程序应按数值数据从高到低对列表进行排序。 但我一直没能为此找到解决方案。

到目前为止我有:

def highlow (): 
    file = open("Thisfile.csv", "r" ) 
    read = file.readlines () 
    list(read) 

我试过:

read.sort () 

但是当我打印'read'时,我得到的是:

['ANDERSON,Jane,7\n', 'BIRCH,Darren,9\n', 'MCKOLEEP,Philip,6\n', 'SMITH,Richard,3\n'] 

相反,我希望列表按每个项目中的整数排序,而不是按字母顺序排序。

请您参考如下方法:

首先阅读带有 csv module 的 CSV ,这将为您提供正确分隔的值:

import csv 
 
with open("Thisfile.csv", "rb") as file: 
    reader = csv.reader(file) 
    rows = [r[:-1] + [int(r[-1])] for r in reader] 
 
rows.sort(key=lambda r: r[-1]) 

rows = [...] 行使用 list comprehension在读取 CSV 文件时将最后一列转换为整数对象。

将行作为单独的列表,排序就变得相对简单了;只需对最后一列进行排序,这就是 key=lambda r: r[-1] 位的作用。

演示:

>>> import csv 
>>> demodata = '''\ 
... ANDERSON,Jane,7 
... BIRCH,Darren,9 
... MCKOLEEP,Philip,6 
... SMITH,Richard,3 
... ''' 
>>> reader = csv.reader(demodata.splitlines(True)) 
>>> rows = [r[:-1] + [int(r[-1])] for r in reader] 
>>> rows.sort(key=lambda r: r[-1]) 
>>> for row in rows: 
...     print row 
...  
['SMITH', 'Richard', 3] 
['MCKOLEEP', 'Philip', 6] 
['ANDERSON', 'Jane', 7] 
['BIRCH', 'Darren', 9]