首页 > 解决方案 > 如何在列表python中找到类似的项目

问题描述

我在 csv 文件上有一些学生的年级和姓名,我可以打印平均成绩

但是如果某个学生的平均水平相似,我应该排序然后写或打印

我怎样才能对相似的平均值进行排序?

输入:

mandana,1,9
hamid,1,9
sina,19,10,19,6,8,14,3
sara,0,5,20,14
ali,1,9

输出 :

ali,5.0
hamid,5.0
mandana,5.0
sina,11.285714285714286
sara,9.75

我厌倦了首先解决问题

with open('Untitled-2.csv', 'w') as fout:
    with open('Untitled-1 - Copy.csv') as fin:
        reader = csv.reader(fin)

        comon_list = list()
        for row in reader:
            name = row[0]
            these_grade = list()
            list_1 = list()

            for grade in row[1:]:
                these_grade.append(int(grade))

            list_1.append(float(mean(these_grade)))

            for item in list_1:
                fout.writelines('%s,%s\n' % (name, item))

标签: pythonpython-3.x

解决方案


使用collections.defaultdict

前任:

import csv
from collections import defaultdict

result = defaultdict(list)
with open('infile.csv') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        avg = float(sum(map(float, row[1:])))/float(len(row[1:]))
        result[avg].append((row[0], avg))   #Groupby avg

result = sorted(result.items())   #Sort elements
with open('outfile.csv', "w") as outfile:
    writer = csv.writer(outfile)
    for _, v in result:
        writer.writerows(v)

推荐阅读