为了账号安全,请及时绑定邮箱和手机立即绑定

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条经验 获得超6个赞

此代码迭代并打印列表中的每个元素。相反,通过与平均值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 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信