从Python中的输出反转一列的数值排序

时间:2016-01-12 10:43:58

标签: python

请,帮助。 我有csv文件,看起来像这样:

435;fd;4

435;a;4

435;b lfdsk;2

435;c lfdsk;4

435;d;14

435;dsf;3

435;ad;4

435;fd;4

我无法从打印件中正确地对一(2)列进行反向排序。

这是我的代码

import csv
import collections

grades = collections.Counter()
with open('Ya.csv') as input_file:
    for row in csv.reader(input_file, delimiter=';'):
        grades[row[2]] += 1

print '\n'.join(('%s;%s' % (key, value) for key, value in grades.most_common()))
input_file.close()

输出:

4;5

3;1

2;1

14;1

2 个答案:

答案 0 :(得分:0)

如果您只是想根据第二列对记录进行排序,可以将其作为:

import csv

records = []
with open('Ya.csv') as input_file:
    for row in csv.reader(input_file, delimiter=';'):
        if len(row) == 3:
            records.append(row)

sorted_records = sorted(records, key=lambda record: int(record[2]), reverse=True)
print sorted_records

答案 1 :(得分:0)

您可以按照以下方式撤消从most_common()返回的订单:

import csv
import collections

grades = collections.Counter()

with open('Ya.csv') as input_file:
    for row in csv.reader(input_file, delimiter=';'):
        grades[row[2]] += 1

print '\n'.join(('%s;%s' % (key, value) for key, value in grades.most_common()[::-1]))

这将显示您的输出如下:

14;1
2;1
3;1
4;5

[::-1]具有以相反的顺序返回从most_common返回的列表的效果。如上所述,使用with语句意味着文件将在之后自动关闭。