亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python列表中兩個字典值的最大平均值

Python列表中兩個字典值的最大平均值

互換的青春 2023-07-18 10:08:22
這是我的字典列表:array_of_dictionaries = [{    "name": "Budi",    "age": 23,    "test_scores": [100.0, 98.0, 89.0]},{    "name": "Charlie",    "age": 24,    "test_scores": [90.0, 100.0]}]這是我的代碼:def get_all_time_max_avg_score(dictionary_list):  for element in dictionary_list:    lensum = len(element['test_scores'])    elesum = sum(element['test_scores'])    meansum = elesum / lensum    for attribute in element.keys():        print("Mr. " + str(element['name']) + " with age(years) " + str(element['age']) + " get the highest average scores, " + str(round(meansum, 2)))        breakget_all_time_max_avg_score(array_of_dictionaries)所以我想從這兩個詞典中獲得最高的平均分。我想要的輸出是:Mr. Budi with age(years) 23 get the highest average scores, 95.67但我得到的是:Mr. Budi with age(years) 23 get the highest average scores, 95.67Mr. Charlie with age(years) 24 get the highest average scores, 95.0我真的很感激我能得到的每一個幫助。
查看完整描述

5 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

此代碼迭代并打印列表中的每個元素。相反,通過與平均值max比較來執行列表。


最大(可迭代,*,默認=無,鍵=功能)


這是一個列表理解的解決方案。


def get_all_time_max_avg_score(dictionary_list):

    text = "Mr. {name} with age(years) {age} get the highest average scores, {average:.2f}"


    def average(element):

        return sum(element['test_scores']) / len(element['test_scores'])


    e = max((element for element in dictionary_list), key=average, default=0)

    return text.format(name=e['name'], age=e['age'], average=average(e))



print(get_all_time_max_avg_score(array_of_dictionaries))

輸出:


Mr. Budi with age(years) 23 get the highest average scores, 95.67


查看完整回答
反對 回復 2023-07-18
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

在打印任何內容之前,您需要計算每一項的平均值


def get_all_time_max_avg_score(dictionary_list):

    for element in dictionary_list:

        lensum = len(element['test_scores'])

        elesum = sum(element['test_scores'])

        element['mean'] = elesum / lensum


    first = sorted(dictionary_list, key=lambda x: x['mean'], reverse=True)[0]


    print("Mr.", first['name'], "with age(years)", first['age'], "get the highest average scores,",

          round(first['mean'], 2))

或者使用Dataframe


def get_all_time_max_avg_score(dictionary_list):

    df = pd.DataFrame(dictionary_list)

    df['mean'] = df['test_scores'].apply(np.mean)

    first = df.loc[df['mean'].idxmax()]

    print("Mr.", first['name'], "with age(years)", first['age'],

          "get the highest average scores,", round(first['mean'], 2))


查看完整回答
反對 回復 2023-07-18
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

使用帶有自定義鍵的內置max函數來找出平均分數最高的條目。


array_of_dictionaries = [{

    "name": "Budi",

    "age": 23,

    "test_scores": [100.0, 98.0, 89.0]

},

{

    "name": "Charlie",

    "age": 24,

    "test_scores": [90.0, 100.0]

}]


all_time_max_avg_score = max(

    array_of_dictionaries,

    key=lambda d: sum(d['test_scores']) / len(d['test_scores'])

)

meansum = sum(all_time_max_avg_score['test_scores']) / len(all_time_max_avg_score['test_scores'])


print("Mr. " + str(all_time_max_avg_score['name']) + " with age(years) " + str(all_time_max_avg_score['age']) + " get the highest average scores, " + str(round(meansum, 2)))



查看完整回答
反對 回復 2023-07-18
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

收集所有名稱的平均值并選擇最大值


def get_all_time_max_avg_score(dictionary_list):

    means = []

    for d in dictionary_list:

        means.append(sum(d['test_scores']) / len(d['test_scores']))

    maxmean = max(means)

    winner = dictionary_list[means.index(maxmean)]

    print(

        f'Mr. {winner["name"]}, with {winner["age"]} years of age, has the ' +

        f'highest average scores: {maxmean:.2f}'

    )



get_all_time_max_avg_score(array_of_dictionaries)

輸出


Mr. Budi, with 23 years of age, has the highest average scores: 95.67


查看完整回答
反對 回復 2023-07-18
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

通過一些額外的循環,您可以確定具有最大平均值的人


def get_all_time_max_avg_score(dictionary_list): 

    maxPersonIndex=0

    maxAver=0

    index=0

    for element in dictionary_list:

        lensum = len(element['test_scores'])

        elesum = sum(element['test_scores'])

        meansum = elesum / lensum

        if(meansum>maxAver):

            maxAver=meansum

            maxPersonIndex=index

        index+=1


            


    for attribute in dictionary_list[maxPersonIndex].keys():

        print("Mr. " + str(element['name']) + " with age(years) " + str(element['age']) + " get the highest average scores, " + str(round(meansum, 2)))

        break

get_all_time_max_avg_score(array_of_dictionaries)


查看完整回答
反對 回復 2023-07-18
  • 5 回答
  • 0 關注
  • 266 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號