python - 如何在列表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))
解决方案
使用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)
推荐阅读
- mysql - MaxScale MaxGUI tarball 安装 MaxGUI 错误
- ruby-on-rails - gem cocoon 在本地工作,但不在生产中
- flutter - 无法从 Firestore Flutter 自动读取列表类型
- r - 更改图例几何类型
- javascript - 无效的网址 | 类型错误
- python - 如何在 Python Postgres 连接器中设置 Schema?
- laravel - Laravel Eloquent 中的 HAVING() 未知列
- docker - 在 docker 镜像中找不到回显
- javascript - Nuxtjs 导入 vue 组件
- javascript - 文本在 HTML/CSS 中没有正确对齐