day2.23

字典

认识字典

# 定义一个变量保存学生的信息
stu = ['张三',18,'185656','5454669',156,65,56]
print(stu[0])
print(stu[1]+2)

stu = {
    'name':'张三',
    'age':18,
    'tel':'185656',
    'id':'5454669',
    'high':156,
    'weight':65,
    'score':56
}
print(stu['name'])
print(stu['age']+2)

字典和列表的选择

# 字典和字典的选择;需要同时报讯多个数据的时候,如果多个数据意义相同(不需要区分)就使用字典;如果多个数据意义不同就是用字典

认识字典(dict)


'''
1)是容器数据类型;
将{}作为容器的标志,里面多个减脂对用逗号隔开;{键1:值1, 键2:值2,...}
键值对格式;键:值
2)字典是可变的(支持增删改);字典是无序(不支持下标,元素顺序不影响结果)

3)对元素的要求
字典的元素是键值对
a.键的要求;键必须是不可变的类型的数据(数字、字符串、布尔、元组等);键是唯一的
b.值的要求;没有要求

'''

字典的基本操作

查 - 获取字典的值

# 1)查单个(重要) -   一次获取一个值
'''
语法1;字典[键]   -   获取字典中指定键对应的值;键不存在会报错
语法2;字典.get(键)   -   获取字典中指定键对应的值;键不存在不会报错,返回 None
      字典.get(键,默认值)   -   获取字典中指定键对应的值;键不存在不会报错,返回默认值
'''

# 2.列表和字典的正确打开方式
class1 = {
    'name': 'python2201',
    'address': '12教室',
    'lecturer': {
        'name': '余婷',
        'gender': '女',
        'tel': '13678192302'
    },
    'class_teacher': {
        'name': '张瑞燕',
        'gender': '女',
        'tel': '110',
        'age': 20,
        'QQ': '617818271'
    },
    'students': [
        {'name': '小明', 'gender': '男', 'age': 18, 'score': 100, 'education': '专科', 'linkman': {'name': '小吴', 'tel': '110'}},
        {'name': '小花', 'gender': '女', 'age': 20, 'score': 98, 'education': '本科', 'linkman': {'name': '小张', 'tel': '120'}},
        {'name': '张三', 'gender': '男', 'age': 30, 'score': 90, 'education': '本科', 'linkman': {'name': '小赵', 'tel': '119'}},
        {'name': '李四', 'gender': '男', 'age': 22, 'score': 70, 'education': '专科', 'linkman': {'name': '小刘', 'tel': '134'}},
        {'name': '王二', 'gender': '男', 'age': 28, 'score': 95, 'education': '本科', 'linkman': {'name': '小徐', 'tel': '2383'}},
        {'name': '赵敏', 'gender': '女', 'age': 27, 'score': 99, 'education': '专科', 'linkman': {'name': '小胡', 'tel': '23423'}},
        {'name': '老王', 'gender': '男', 'age': 22, 'score': 89, 'education': '本科', 'linkman': {'name': '小王', 'tel': '1234'}}
    ]
}

# 1) 获取班级名字
print(class1['name'])

# 2) 获取讲师的名字
lecturer = class1['lecturer']
print(lecturer['name'])
print(class1['lecturer']['name'])

# 3) 获取班主任电话号码
class_teacher = class1['class_teacher']
print(class_teacher['tel'])

# 4) 统计学生中男生的数量
students = class1['students']
students_count = 0
for i in students:
    if i['gender'] == '男':
        students_count += 1
print(students_count)

# 5) 计算所有学生分数的平均分
# a
list1 = []
for i in students:
    score = int(i['score'])
    list1.append(score)
print(sum(list1)/len(list1))
# b
result = sum(stu['score'] for stu in students)/len(students)
print(result)

# 6) 获取分数最高的学生的名字
students = class1['students']
max_score = max(list1)
for i in students:
    if int(i['score']) == max_score:
        print(i['name'])

# 7) 获取所有紧急联系人的电话
for i in students:
    linkman = i['linkman']
    print(linkman['tel'])

遍历

'''
1)直接遍历
for 键 in 字典:
    pass

2)
for 键,值 in 字典.items():
    pass     
'''

字典的增删改

增/改 - 添加键值对

'''
1)字典[键] = 值     如果键存在,就修改指定键对应的值;如果不存在就添加键值对
2)字典.setdefault(键,值)    添加键值对(如果不存在就添加键值对,如果键存在则不改变
'''

删 - 删除键值对

'''
del 字典[键]   -   删除指定键对应的键值对
字典.pop(键)   -   取出指定键对应的值
'''

字典的相关操作

相关操作

# 1)字典不支持;+,-,*,/,<=,>=,只支持;==,!=
# 2)in 和 not in -   字典的in 和 not in 操作判断的是字典中是否存在指定的键
# 键 in 字典

相关函数 - len、dict

'''
len(字典)   -   获取字典中键值对个数

dict(数据)    - 将指定数据转换为字典
对数据的要求;1.数据本身是一个序列
            2.序列中的元素必须是有且仅有两个元素的小序列,并且其中第一个元素是不可变的数据     
'''

相关方法

# a.
# 字典.clear()
# b.
# 字典.copy()
# c.
# 字典.keys() -   返回一个序列,序列中的元素是字典所有的键
# 字典.values()   -   返回一个序列,序列中的元素是字典所有的值
# 字典.items()    -   返回一个序列,序列中的元素是字典中的键值对(元组)
# d.
# 字典.update(序列) -   将可以转换为字典的序列中的元素全部添加在字典中
# 字典1.update(字典2)   -   将字典2中的所有键值对都添加到字典1中(没有添加,有的替换)

字典的推导式

'''
{表达式1:表达式2 for 变量 in 序列}

{表达式1:表达式2 for 变量 in 序列 if 条件语句}
'''

作业

  1. 定义一个变量保存一个学生的信息,学生信心中包括:姓名、年龄、成绩(单科)、电话、性别
dict1 = {}
name = input('请输入学生姓名;')
dict1['name'] = name
age = input('请输入学生年龄;')
dict1['age'] = age
score = input('请输入学生单科成绩;')
dict1['score'] = score
tel = input('请输入学生电话;')
dict1['tel'] = tel
gender = input('请输入学生性别;')
dict1['gender'] = gender
print(dict1)
  1. 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

    1. 统计不及格学生的个数
    2. 打印不及格未成年学生的名字和对应的成绩
    3. 求所有男生的平均年龄
    4. 打印手机尾号是8的学生的名字
    5. 打印最高分和对应的学生的名字
    6. 删除性别不明的所有学生
    7. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
    '''
    list1 = []
    for i in range(6):
        dict1 = {}
        name = input('请输入学生姓名;')
        dict1['name'] = name
        age = input('请输入学生年龄;')
        dict1['age'] = age
        score = input('请输入学生单科成绩;')
        dict1['score'] = score
        tel = input('请输入学生电话;')
        dict1['tel'] = tel
        gender = input('请输入学生性别;')
        dict1['gender'] = gender
        list1.append(dict1)
    '''
    list1 = [
        {
            'name':'张三',
            'age':18,
            'score':59,
            'gender':'男',
            'tel':110
        },
        {
            'name':'李四',
            'age':17,
            'score':69,
            'gender':'未知',
            'tel':110
        },
        {
            'name':'王五',
            'age':28,
            'score':66,
            'gender':'女',
            'tel':1103
        },
        {
            'name':'赵六',
            'age':21,
            'score':55,
            'gender':'男',
            'tel':1101
        },
        {
            'name':'钱七',
            'age':15,
            'score':99,
            'gender':'男',
            'tel':11075
        },
        {
            'name':'孙八',
            'age':33,
            'score':79,
            'gender':'女',
            'tel':11058
        },
    ]
    # 1/2
    count1 = 0
    for j in range(6):
        if int(list1[j]['score']) < 60:
            count1 += 1
            print(list1[j]['name'],list1[j]['score'])
    print('不及格学生个数;',count1)
    print()
    # 3.
    age_average = sum([int(x['age']) for x in list1 if x['gender'] == '男']) // len([int(x['age']) for x in list1 if x['gender'] == '男'])
    print(age_average)
    print()
    # 4.
    for i in list1:
        if int(i['tel']) % 10 == 8:
            print(i['name'])
    print()
    # 5.
    list2 = []
    for i in list1:
        list2.append(int(i['score']))
    for i in list1:
        if int(i['score']) == max(list2):
            print(i['name'])
    print()
    # 6.
    for i in list1:
        if i['gender'] == '未知':
            list1.remove(i)
    print(list1)
    print()
    # 7.
    list3 = []
    for i in list1:
        list3.append(int(i['score']))
    list3.sort(reverse=True)
    list4 = []
    for j in range(len(list1)):
        for i in list1:
            if int(i['score']) == list3[j]:
                list4.append(i)
    print(list4)
    
    1. 定义一个变量保存一个班级的信息,班级信息中包括:班级名称、教室位置、班主任信息、讲师信息、班级所有的学生(根据实际情况确定数据类型和具体信息)
dict1 = {
    'class_name': 'python2201',
    'class_location': '12教室',
    'lecturer': {
        'name': '余婷',
        'gender': '女',
        'tel': '13678192302'
    },
    'class_teacher': {
        'name': '张瑞燕',
        'gender': '女',
        'tel': '110',
        'age': 20,
        'QQ': '617818271'
    },
    'students': [
        {'name': '张三', 'gender': '男', 'age': 18, 'score': 100, 'education': '专科'},
        {'name': '李四', 'gender': '女', 'age': 20, 'score': 98, 'education': '本科'},
        {'name': '王五', 'gender': '男', 'age': 30, 'score': 90, 'education': '本科'},
        {'name': '赵六', 'gender': '男', 'age': 22, 'score': 70, 'education': '专科'},
        {'name': '孙七', 'gender': '男', 'age': 28, 'score': 95, 'education': '本科'},
        {'name': '钱八', 'gender': '女', 'age': 27, 'score': 99, 'education': '专科'},
        {'name': '刘九', 'gender': '男', 'age': 22, 'score': 89, 'education': '本科'}
    ]
}
  1. 已知一个列表保存了多个狗对应的字典:
dogs = [
  {'name': '贝贝', 'color': '白色', 'breed': '银狐', 'age': 3, 'gender': '母'},
  {'name': '花花', 'color': '灰色', 'breed': '法斗', 'age': 2},
  {'name': '财财', 'color': '黑色', 'breed': '土狗', 'age': 5, 'gender': '公'},
  {'name': '包子', 'color': '黄色', 'breed': '哈士奇', 'age': 1},
  {'name': '可乐', 'color': '白色', 'breed': '银狐', 'age': 2},
  {'name': '旺财', 'color': '黄色', 'breed': '土狗', 'age': 2, 'gender': '母'}
]
  1. 利用列表推导式获取所有狗的品种
print([i['breed'] for i in dogs])
  1. 利用列表推导式获取所有白色狗的名字
print([i['name'] for i in dogs if i['color'] == '白色'])
  1. 给dogs中没有性别的狗添加性别为 ‘公’
for i in dogs:
  i.setdefault('gender', '公')
print(dogs)
  1. 统计 ‘银狐’ 的数量
count1 = 0
for i in dogs:
  if i['breed'] == '银狐':
    count1 += 1
print('银狐数量:',count1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值