Python中输出的一列的反向数字排序

Python中输出的一列的反向数字排序,python,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 我无法对打印的第二列进行正确的反向排序 这是我的密码 import csv import collections grades = collections.Counter() with open('Ya.csv') as input_file: for row in

请帮忙。 我有一个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
我无法对打印的第二列进行正确的反向排序

这是我的密码

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

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

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

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

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

您可以将从
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
这将显示您的输出,如下所示:

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]
的作用是按相反顺序返回从
最常见的
返回的列表。如前所述,使用
with
语句意味着文件将在之后自动关闭。

您可以按如下方式颠倒从
最常见()返回的顺序:

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
这将显示您的输出,如下所示:

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]
的作用是按相反顺序返回从
最常见的
返回的列表。如前所述,使用
with
语句意味着文件将在之后自动关闭。

您使用了错误的数组索引。索引2表示第三个字段,因此计算最后一列。输出意味着你有5倍的4作为最后一列,一次是3,一次是2,一次是14,你不需要
input\u file.close()
之后加
块。这就是
with
块的作用。@HubertGrzeskowiak因为我的初始数据文件有3列,您的预期输出是什么?@MartinEvans喜欢我的输出,但反向排序只需要第2列!您使用了错误的数组索引。索引2表示第三个字段,因此计算最后一列。输出意味着你有5倍的4作为最后一列,一次是3,一次是2,一次是14,你不需要
input\u file.close()
之后加
块。这就是
with
块的作用。@HubertGrzeskowiak因为我的初始数据文件有3列,您的预期输出是什么?@MartinEvans喜欢我的输出,但反向排序只需要第2列!您是排序1列,而不是第2列您是排序1列,而不是第2列