چطور میتونم خروجی یک لیست را تبدیل به dict و مقادیر اون رو هم به صورت صعودی منظم کنم

سلام

وقت بخیر

من یک برنامه ای نوشتم که از یک فایل اسامی یکسری افراد را همراه با نمراتشون رو که مقابل هم نام قید شده رو دریافت می کنه و سپس در خروجی نام هر فرد و معدلش رو حساب می کنه.

حالا باید معدل ها رو Sort کنم؛ و در خروجی به ترتیب صعودی نام هر فرد و معدلش چاپ بشه.

چطور می تونم مقادیر خروجی اول رو در دیکشنری بریزم و سپس اونها رو sort کنم؟

نمونه خروجی اول:

amir,7.5

saeid,12.0669

mojgan,17.285

shirin,14.75

نمونه خروجی دوم (مرتب شده):

amir,7.5

saeid,12.0669

shirin,14.75

mojgan,17.285

پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 6 سال پیش

فقط اسم فایل خودتون رو جای mark.txt قرار بدید سعی کردم طبق راهی که خودتون پیشنهاد دادید برم جلو

import operator
'''
mark.txt example:

amir,12
zahra,14
mohsen,20
mehran,17
'''
with open('mark.txt', 'r') as file:
    list = []
    # step1: read file line by line and split words by ',' character
    # and put the result in list
    for line in file:
        onlyNameAndMarks = line.strip('\n')
        list += onlyNameAndMarks.split(',')
    # step2: convert list into dictionary with integer value
    dictWithStrValue = dict(list[i:i+2] for i in range(0, len(list), 2))
    dict = dict((k, int(v)) for k, v in dictWithStrValue.items())
    print("********first output :***********")
    for key, val in dict.items():
        print("Name: ", key, " -->", " Mark: ", val)
    # step3: sorting dictionary
    sorted_dict = sorted(dict.items(), key=operator.itemgetter(1), reverse=True)
    print("********second output :************")
    for item in sorted_dict:
        print("Name: ", item[0], " -->", " Mark: ", item[1])
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش

ممنون بابت پاسختون.

فقط من یک نکته ای رو فراموش کردم در سوال اولم مطرح کنم اون هم اینکه نتیجه خروجی اول(محاسبه معدل ها) در فایل ذخیره نمیشه؛ در این صورت چطور میتونم sort رو انجام بدم

این کد خروجی اول:

import csv
import statistics
from statistics import mean
with open('grades.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        name = row[0] 
        these_grades = list()
        for grade in row[1:]:
            these_grades.append(int(grade))
            print(name,',',mean(these_grades))

همچنین اینکه بعد از sort کردن باید 2 معدل بالای لیست رو همراه با نام و سپس 2معدل پایین لیست رو همراه با نام نمایش بدم. و در واقع هیچکدام از موارد خواسته شده بالا هم در فایل ذخیره نمیشود.

sokanacademy forum
کاربر سکان آکادمی 6 سال پیش

قطعه کدتون رو متوجه نشدم ولی برای اینکه خروجی رو تو فایل بنویسید باید فایل رو تو مد r+ باز کنید و خروجی رو به جای پرینت کردن از متد write استفاده کنید . پیشنهاد میکنم فایلتون رو تو کدی که نوشتم بذارید و برای trace کردن پرینت اضافه کنید تو کامنت هاشم مراحل رو توضیح دادم

online-support-icon