在我的程序中,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]
关于python - 如何按从高到低对字母数字列表进行排序(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30697026/