amir_mohammadi

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

amir_mohammadi ۱۳۹۷/۰۶/۱۵ زبان برنامه‌نویسی پایتون

سلام

وقت بخیر

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

حالا باید معدل ها رو 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

پاسخ‌ها به این تاپیک
مهران
مهران توسعه دهنده ی وب علاقه مند به اپن سورس
۱۳۹۷/۰۶/۱۵

فقط اسم فایل خودتون رو جای 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])
amir_mohammadi
amir_mohammadi
۱۳۹۷/۰۶/۱۶

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

فقط من یک نکته ای رو فراموش کردم در سوال اولم مطرح کنم اون هم اینکه نتیجه خروجی اول(محاسبه معدل ها) در فایل ذخیره نمیشه؛ در این صورت چطور میتونم 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معدل پایین لیست رو همراه با نام نمایش بدم. و در واقع هیچکدام از موارد خواسته شده بالا هم در فایل ذخیره نمیشود.

در پاسخ به

مهران
مهران توسعه دهنده ی وب علاقه مند به اپن سورس
۱۳۹۷/۰۶/۱۷

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

در پاسخ به