m0_70680242 2022-07-10 16:55 采纳率: 82.2%
浏览 23
已结题

包含多种顺序文档排序按特定顺序排序

如题
文档如下

语文,101,小张,80
语文,102,小王,82
语文,103,小李,80
语文,104,小赵,94
语文,105,小强,85
数学,101,小张,98
数学,102,小王,97
数学,103,小李,84
数学,104,小赵,93
数学,105,小强,94
英语,101,小张,99
英语,102,小王,80
英语,103,小李,91
英语,104,小赵,91
英语,105,小强,95

写法如下

def student_sort():
    f4 = open('G:\pycharm_makeshif\student_teacher_name','r',encoding='utf-8')
    student_subject_sort = []
    student_subject_english = []
    student_subject_chinese = []
    student_subject_math = []
    for i in f4:
        i = i[:-1]#分行
        subject,teacher,num,name,grade = i.split(",")
        g = subject,teacher,num,name,grade
        student_subject_sort.append(g)
    print(student_subject_sort)
    for i in range(len(student_subject_sort)):#分类
        if student_subject_sort[i][0] == "语文":
            student_subject_chinese.append(student_subject_sort[i])
        elif student_subject_sort[i][0] == "数学":
            student_subject_math.append(student_subject_sort[i])
        elif student_subject_sort[i][0] == "英语":
            student_subject_english.append(student_subject_sort[i])

    for sorting in [student_subject_english,student_subject_chinese,student_subject_math]:#排序
        print(sorting)
        # sorting.sort(key=lambda x: x[4],reverse=True)
    with open("student_sort_output",'w',encoding="utf-8") as f6:#存储
        for i in [student_subject_chinese, student_subject_math, student_subject_english]:
            f6.write(f"{','.join(map(str,i))}\n")

student_sort()

解释如下,将文档遍历后存储到列表中
再将列表分行分批排序后在累加输出
这种写法简直屎山
问题:在于列表和字典的特性,只能通过列表内嵌套字典写,判断也以来字典,更加繁杂,有没有简易的写法?

  • 写回答

1条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-07-10 17:49
    关注

    你给的例子少一列吧,好像每行应该有5个值?
    subject,teacher,num,name,grade = i.split(",")
    分组的话排序两次就可以了:

    def student_sort():
        f4 = open('G:\pycharm_makeshif\student_teacher_name','r',encoding='utf-8')
        p = [i.split(",") for i in f4.readlines()]
        p.sort(key=lambda x:eval(x[3].strip()),reverse=True)
        # 如果是五列数据就是
        # p.sort(key=lambda x:eval(x[4].strip()),reverse=True)
        p = [",".join(i) for i in sorted(p,key=lambda x:x[0])]
        f6 = open("student_sort_output",'w',encoding='utf-8')
        f6.writelines(p)
        f4.close()
        f6.close()
    
    student_sort()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月18日
  • 已采纳回答 7月10日
  • 修改了问题 7月10日
  • 修改了问题 7月10日
  • 展开全部

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探