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

标签 python sorting csv

在我的程序中,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/

相关文章:

python - python 字符串中出现频率最高的一个或多个字母

java - 是否可以强制 Map 以一种方式排序,但以另一种方式获取值?

python - 以与引用列表相同的方式从相应列表中排序或删除元素

javascript - 将csv文件作为命令传递给nodeJs中的参数

node.js - 读取 csv 文件的前 'x' 行

python - 如何在后台修复窗口?

python - 如何在 Python 中使用 gunicorn 的日志记录模块

python - 初学者 python : monty hall & counter output

excel - 根据每个条目的最后两个字符使用 VBA 对表进行排序

PHP:在 SQL 中插入时将每个数据放入单引号 (' ' )