2018-08-28 day7-字典和集合

总结

一.字典(dict)

1.字典是容器类型(序列),以键值对作为元素(字典里面存的数据全是以键值对的形式出现的)
{key1:value1, key2:value2...}
2.键值对:键:值(key:value)
键(key):要唯一,不可变的(数字,布尔,字符串和元祖)
值(value):可以不唯一,可以是任何类型的数据
3.字典是可变的(增删改) --- 可指的是字典中的键值对

1.声明字典
dict1 = {10: 100, 'a': 97, True: '布尔', (10, 10): 'start', 'a': 'A'}
print(dict1)
person1 = ['酒坛坛儿', 20, 5, 90]

# 声明一个字典,有三个键值对,key分别是name,age,work_age
person2 = {'name': '酒坛坛儿', 'age': 20, 'work_age': 5}
dict2 = {}   # 空的字典
print(type(dict2))
2.查(获取值)

获取字典的元素对应的值(字典存数据,实质还是存的value,key是获取value的手段)
a.字典[key] --- 通过key获取值

print(person2['name'], person2['age'])
# print(person2['sex'])
# 通过字典[key]获取value的时候,如果key不存在会发生keyError异常

b.字典.get(key)

print(person2.get('age'))
# 区别就是通过字典.get(key),如果key不存在不会报错,返回None
print(person2.get('sex'))   # None -- python中的特殊值,代表没有
总结:确定key值肯定存在的时候用[]语法获取value, key值可能不存在,不存在时不希望报错,而是想自己对它进行特殊处理的时候使用get获取value

c.遍历字典

cat = {'name': '绿帽', 'age': 2}
# 遍历字典直接取到字典的所有的key值
for key in cat:
    print(key)
3.改(修改key对应的value)

字典[key] = 新值

cat['name'] = 'green'
print(cat)
4.增(添加键值对)

字典[key] = 值 (key本来不存在)

cat['type'] = '美短'
print(cat)
5.删(删除键值对)

a.del 字典[key]

del cat['age']
print(cat)

b.字典.pop(key)

name = cat.pop('name')
print(name, cat)

二.字典相关的运算

1.字典不支持'+'和'*'
2.in 和 not in
computer = {'brand': '联想', 'color': 'black'}
print('color' in computer)
3.len()
print(len(computer))
4.字典(clear):删除字典中所有的元素(键值对)
computer.clear()
print(computer)
5.字典.copy():拷贝字典中的所有的元素,放到一个新的字典中
dict1 = {'a': 1, 'b': 2}
dict2 = dict1     # 将dict1中的地址赋给dict2,两个变量指向同一块内存区域
dict3 = dict1.copy()    # 将dict1中的内存复制到一个新的内存区域中,然后将新的地址给dict3
6.dict.fromkeys(序列,默认值=None)

将序列中的每个值作为key,默认值为value创建一个新的字典

注意:默认值可以不写,写的话只能写一个值
print(dict.fromkeys('abc', 0))
7.字典.keys()(了解)

获取字典中的key,以列表(dict_keys)的形式返回

8.字典.value(了解)

获取字典中所有的value

9.字典.items()
print(dict1.items())     # 不推荐使用
10.字典.setdefault(key,默认值=None)

给字典添加键值对,如果key本身就存在,这个方法就无作为

dict1.setdefault('a', 'abc')
print(dict1)
11.字典1.update(字典2)

将字典2的键值对更新到字典1中
更新方式:如果字典2中的key在字典1中是存在的,就用字典2中key对应的值去更新字典1中的值,不存在就添加到字典1中

dict1 = {'aa': 1, 'bb': 'abc', 'cc': True}
dict1.update({'aa': 99,'dd': '你好'})
print(dict1)

三.字典和列表的组合

学生管理系统

1.一个系统可以存储多个学生

系统应该是一个容器:列表,字典,元祖

2.一个学生可以存储:姓名,电话,籍贯,专业,学号等等
3.添加学生
4.删除学生
5.修改学生的信息...

什么时候使用列表? 什么时候使用字典?

1.保存的多个数据的类型是同一个类型时候,用列表

例如:一个变量保存所有的数学成绩,声明一个变量保存所有的学生信息

2.保存的多个数据类型不同就使用字典

例如:声明一个变量保存一个学生的信息

1.列表中有字典
student_system = [
    {'name': '博丽灵梦', 'age': 20, 'tel': 777, 'address': '博丽神社'},
    {'name': '芙兰朵露', 'age': 495, 'tel': 666, 'address': '红魔馆'}
]
# 取出第一个学生的籍贯
print(student_system[0]['address'])
2.字典中有列表
py_class = {
    'students': [
        {'name': 'student1', 'age': 20, 'id': '001'},
        {'name': 'student2', 'age': 21, 'id': '002'},
        {'name': 'student3', 'age': 22, 'id': '003'}
    ]
}

练习1:在班级python1806中添加一个学生,学生的信息自己输入,名字和年龄和id

name1 = input('name: ')
age1 = input('age: ')
id1 = input('id: ')
# 一个学生对应一个字典
student = {'name': name1, 'age': age1, 'id': id1}
# 将学生对应的字典添加到列表中
py_class['students'].append(student)
print(py_class)

练习2:输入一个学生的姓名,根据姓名去删除对应的学生

del_name = input('请输入需要删除的学生姓名')
# 获取班级所有的学生
all_student = py_class['students']
# 遍历取出每个学生对应的字典
for student_dict in all_student[:]:
    # 判断name对应的值是否和输入的要删除的姓名相同
    if student_dict['name'] == del_name:
        all_student.remove(student_dict)
print(py_class)

四.集合(set)

集合是python中的一种容器类型:无序的,可变的,值唯一

1.声明一个集合
set1 = {1, 'abc', 100,}
print(set1, type(set1))

# 将其他的序列转换成集合,自带一个去重的功能
set2 = set('name name')
print(set2)
set3 = {10, 4.14, True, 'abc'}
print(set3)
2.查(获取集合中的元素)

集合是不能单独获取其中的某一个元素

for item in set3:
    print(item)
3.增(添加元素)

a. 集合.add(元素)

set3.add('good')
print(set3)

b.集合1.update(集合2):将集合2中的元素,添加到集合1中

set3.update({1, 2, 3})
print(set3)
4.删

集合.remove(元素)

set3.remove('abc')
print(set3)

删除所有的元素

set3.clear()
print(set3)
5.改(改不了)
6.数学相关的集合运算

a.判断包含情况:
集合1>=集合2: 判断集合1中是否包含集合2
集合2>=集合1: 判断集合2中是否包含集合1
b.求并集

set1={1, 2, 3,}
set2={1, 2, 7, 8}
print(set1 | set2)

c.求交集:&
求两个集合的公共部分

print(set1 & set2)

d.求差集:-

print(set1 - set2)

e.求补集:^
求两个集合中除了公共部分以外的部分

print(set1 ^ set2)

作业

students = [
    {'name':'小明','age':18,'sex':'男','id':'001'},
    {'name':'小红','age':19,'sex':'女','id':'002'}
]
# 进入主程序
while True:
    print('======================学生管理系统====================\n'
          '1.添加学生信息\n'
          '2.查看学生信息\n'
          '3.修改学生信息\n'
          '4.删除学生信息\n'
          '5.退出学生管理系统\n'
          '======================学生管理系统====================')
    key = int(input('请输入选项: '))
    # 添加学生信息
    if key == 1:
        name = input('请输入学生姓名: ')
        age = int(input('请输入学生年龄: '))
        sex = input('请输入学生性别: ')
        id = int(input('请输入学生学号: '))
        student = {'name':name,'age':age, 'sex':sex, 'id':id}
        students.append(student)
        print('添加成功!')
        print(student)


    # 进入查找学生子系统
    elif key == 2:
        # 显示所有学生的姓名
        for student in students[:]:
            print(student['name'])
        # 查看学生详细信息
        while True:
            a = False
            name = input('请输入学生姓名:')
            for student in students[:]:
                if student['name'] == name:
                    print(student)
                    a = True
                    break
            # 如果没有匹配成功就提示
            if a == False:
                print('没有匹配中输入的学生')
            key1 = input('继续查看请按1\n返回主菜单请按2: ')
            if key1 == '2':
                break

    # 修改学生信息
    elif key == 3:
        for student in students[:]:
            print(student['name'])
        while True:
            a = False
            name = input('请输入需要修改的学生姓名: ')
            for student in students[:]:
                if student['name'] == name:
                    content = int(input('1.学生姓名\n2.学生年龄\n3.学生性别\n4.学生id\n请选择要修改的内容的序号: '))
                    if content == 1:
                        new_name = input('请输入学生的新名字: ')
                        student['name'] = new_name
                        print('修改成功!')
                        print(student)

                    elif content == 2:
                        new_age = input('请输入学生的新年龄: ')
                        student['age'] = new_age
                        print('修改成功!')
                        print(student)

                    elif content == 3:
                        new_sex = input('请输入学生的新性别: ')
                        student['sex'] = new_sex
                        print('修改成功!')
                        print(student)

                    elif content == 4:
                        new_id = input('请输入学生的新id: ')
                        student['id'] = new_id
                        print('修改成功!')
                        print(student)

                    else:
                        print('输入有误,请重新输入!')
                    a = True
                    break
            if a == False:
                print('没有匹配到该学生,请检查后输入!')

            key3 = input('继续修改请按2\n返回主菜单请按3: \n')
            if key3 == '3':
                break

    # 删除学生
    elif key ==4:
        for student in students[:]:
            print(student['name'])
        while True:
            a = False
            student_name = input('请输入学生姓名: ')
            for student in students[:]:
                if student['name'] == student_name:
                    students.remove(student)
                    a = True
            if a == False:
                print('输入学生不存在,请重新输入!')
            key4 = input('继续删除学生请按1\n返回主菜单请按2:')
            if key4 == '2':
                break




    # 退出程序
    elif key == 5:
        break

你可能感兴趣的:(2018-08-28 day7-字典和集合)