python字典基础问题求解

#求班级总成绩最高的学生
#求班级总成绩语文最高的学生
#求班级总成绩数学最高的学生
class1 = {'小王':{'chinese':86,'math':92},'小红':{'chinese':96,'math':99},'小明':{'chinese':72,'math':84}}



```python

# encoding=utf-8

class1 = {'小王': {'chinese': 86, 'math': 92}, '小红': {'chinese': 96, 'math': 99}, '小明': {'chinese': 72, 'math': 84}}


# 求班级总成绩最高的学生
def highest_sum_grade():
    sum_grade = 0  # 初始化总成绩
    lt1 = []  # 存放每位同学的总成绩
    lt2 = []  # 存放对应的同学的姓名
    for stu in class1:
        sum_grade = class1[stu].get('chinese') + class1[stu].get('math')
        lt1.append(sum_grade)
        lt2.append(stu)
    student = lt2[lt1.index(max(lt1))]
    print('班级总成绩最高的学生:%s' % student)


# 求班级语文成绩最高的学生
def highest_chinese_grade():
    chinese_grade = 0  # 初始化语文成绩
    lt1 = []  # 存放每一个同学的语文成绩
    lt2 = []  # 存放每一个同学的姓名
    for stu in class1:
        chinese_grade = class1[stu].get('chinese')
        lt1.append(chinese_grade)
        lt2.append(stu)
    student = lt2[lt1.index(max(lt1))]
    print('班级语文成绩最高的学生:%s' % student)


# 求班级数学成绩最高的学生
def highest_math_grade():
    math_grade = 0  # 初始化数学成绩
    lt1 = []  # 存放每一个同学的数学成绩
    lt2 = []  # 存放每一个同学的姓名
    for stu in class1:
        math_grade = class1[stu].get('math')
        lt1.append(math_grade)
        lt2.append(stu)
    student = lt2[lt1.index(max(lt1))]
    print('班级数学成绩最高的学生:%s' % student)


# 测试
if __name__ == '__main__':
    highest_sum_grade()
    highest_chinese_grade()
    highest_math_grade()

```

  用轮询字典视图dict.items()实现精确查找。只直接轮询字典的话相当于轮询dict.keys(),轮询字典视图才可以同时得到key、value。本题目是嵌套双层字典,第一层的value,也是字典,轮询的v即字典。

本题目重在考查字典的dict.items()字典视图、和字典value的获取。我用了dict.get(key)方法猎取,还可以及dict[key]获取,本题目中两种方式没有差别。了解二者差异,可以查阅相关教程,或者我的CSDN相关学习笔记。


对您有帮助,请点击我的回答左下角
“采纳该答案”

#!/usr/bin/nve python
# coding: utf-8


class1 = {'小王': {'chinse': 86, 'math': 92}, '小红': {'chinse': 96, 'math': 99}, '小明': {'chinse': 72, 'math': 84}}

count = 0 # 总分
name = ''

for k,v in class1.items():

    if sum(v.values()) > count:
        count = sum(v.values())
        name = k

print(f"\n总分最多的是{name}{class1.get(name)}")

# *********
math = 0 # 总分
name = ''

for k,v in class1.items():

    if v.get('math') > math:
        math = v.get('math')
        name = k

print(f"\n数学最多的是{name}:分数 {math}")

# *********
chinse = 0 # 总分
name = ''

for k,v in class1.items():

    if v.get('chinse') > chinse:
        chinse = v.get('chinse')
        name = k

print(f"\n语文最多的是{name}:分数 {chinse}")

img


对您有帮助,请点击左边
“采纳该答案”



```python

import operator
class1 = {'小王':{'chinese':86,'math':92},'小红':{'chinese':96,'math':99},'小明':{'chinese':72,'math':84}}
AllTotalScore = {}    #定义学生总分字典
ChineseScore ={}      #定义学生语文分数字典
MathScore = {}        #定义学生数学分数字典
for person in class1:
    EveryTotalScore = 0
    ChineseScore[person] = class1[person]['chinese']#取出每个人的语文分数存入字典,循环结束后ChineseScore:{'小王': 86, '小红': 96, '小明': 72}
    MathScore[person] = class1[person]['math']#取出每个人的数学分数存入字典,循环结束后MathScore:{'小王': 92, '小红': 99, '小明': 84}
    for subject in class1[person]:
        EveryTotalScore +=class1[person][subject]#每个人的语文和数学成绩相加
    AllTotalScore[person] = EveryTotalScore#循环结束后 AllTotalScore:{'小王': 178, '小红': 195, '小明': 156}

print('总成绩最高的学生:',max(AllTotalScore, key = AllTotalScore.get))#该函数能够取出字典最大值所对应的键
print('语文最高的学生:',max(ChineseScore, key = ChineseScore.get))
print('数学最高的学生:',max(MathScore, key = MathScore.get))


```