day 7 Python基础语言学习 ——字典的增删改、相关操作、函数和方法

学习Python基础语言学习 ——字典的增删改、相关操作、函数和方法
一、认识字典
1.引入

需求:定义一个变量保存一个学生的信息

方法1 列表

stu = ['小明',32,'电子信息',170,80,90]
print(stu[1])

方法2 字典

stu = {
    'name':'小明',
    'age': '32',
    '专业':170,
    'height':80,
    'weght':90
}
print(stu['age'])
2.字典和列表的选择

字典 ------ 如果保存多个意义不同的数据,就使用字典;

列表 ------保存多个意义相同的数据就使用列表

3.什么是字典( dict

字典是系统类型,属于容量型(序列)

标志:{},里面多个键值对(元素)用逗号隔开:{键1:值1,键2:值2, …}
特点:
1)字典是可变的(支持增删改)
2)字典是无序的(不支持下标操作,顺序不影响结果)
键唯一 ---- 键必须是不可变类型的数据(数字、字符串、布尔、空值、元组)
同一个字典中同一个键只能出现一次(重复出现的键只会显示,最后一个出现的)
值 – 没有要求(任何数据的类型)

字典无序

print({'a':10,'b':20} == {'b':20,'a':10} ) 
#True

键不可变

dict1 ={10:20,'a':30, (10,20):40}
#报错

键唯一

dict2 = {'a':10, 'b':20, 'a':30}
print(dict2)
#{'a': 30, 'b': 20}

空字典

dict3 = {}
二、查操作
字典存储数据真正保存的是值,键只是用俩对峙进行区分和说明的(相当于列表中的元素的下标)
1.查单个 - 获取单个值
1)字典[键] - 获取字典中指定键对应的值,如果不存在会报错
2)字典.get(键) – 获取字典中指定对应的值,如果不存在会报错并且会返回空值(None)
3)字典.get(键,默认值) - 获取字典中指定对应的值,如果不存在会报错并且会返回空值
dog = {'name':'旺财','age':3, 'type': '土狗','price':3000, 'color':'黄色'}
print(dog['type'])
print(dog['name'])
# print(dog['weight'])  #KeyError: 'weight'
# #报错
print(dog.get('price'))
print(dog.get('color'))
print(dog.get('weight')) #None
print(dog.get('age',4))
print(dog.get('color','白色'))
print(dog.get("weight",7))  #7
2.生活的列表和字典

需求:结合实际定义一个变量保存一个班级的信息

班级信息:班级名、教室、讲师、班主任、学生

class1 = {
    'classnames':'python2205',
    'classroom':'11教',
    'lecturer':{'name':'余婷','age':18, 'tel':'13678192302', 'gender':'女'},
    'classteacher':{'name':'燕子姐', 'age':18, 'tel':'119', 'qq':'8882133'},
    'student':[
        {'name':'stu1', 'age':19, 'tel':'12893878', 'gender':'男','linkman':{'name':'张三','tel':'361388'}},
        {'name': 'stu2', 'age': 28, 'tel': '8727832', 'gender': '男', 'linkman': {'name': '小明', 'tel': '19202'}},
        {'name': 'stu3', 'age': 30, 'tel': '291912', 'gender': '女', 'linkman': {'name': '李四', 'tel': '1910283'}},
        {'name': 'stu4', 'age': 17, 'tel': '2349183', 'gender': '男', 'linkman': {'name': '老王', 'tel': '109221567'}},
        {'name': 'stu5', 'age': 16, 'tel': '27273482', 'gender': '女', 'linkman': {'name': '王五', 'tel': '119283427'}},
        {'name': 'stu6', 'age': 22, 'tel': '1242402', 'gender': '男', 'linkman': {'name': '赵六', 'tel': '2091834'}}
    ]
}

获取班级名称

print(class1.get('classnames'))
#python2205

获取讲师的名字和电话

print(class1['lecturer']['name'],class1['lecturer']['tel'])
#余婷 13678192302

打印所有学生的名字

result = [x['name'] for x in class1['student']]
print(result)
#['stu1', 'stu2', 'stu3', 'stu4', 'stu5', 'stu6']

打印所有女学生的联系人的电话

for x in class1['student']:
    if x['gender'] == '女':
        print(x['tel'])
 #291912
27273482
三、增删改
  1. 增(添加键值对)、改(修改某个键对应的值)
1)字典[键] = 值 - 如果建不存在就添加键值对,如果键存在就修改指定键对应的值
2)字典.setedefault(键, 值) - 添加键值对(只会在键不存在的时候实现添加,存在时不作为(不修改),原样返回)

例如:

1)

stu = {'name':"小明", 'age':18, 'height':177}
print(stu)
# {'name': '小明', 'age': 18, 'height': 177}
stu['weight'] = 70
print(stu)
# {'name': '小明', 'age': 18, 'height': 177, 'weight': 70}
tu['age'] = 20
print(stu)
# {'name': '小明', 'age': 20, 'height': 177, 'weight': 70}

2)

stu.setdefault('weight', 80)
print(stu)
# {'name': '小明', 'age': 20, 'height': 177, 'weight': 70}
stu.setdefault('age', 30)
print(stu)
# {'name': '小明', 'age': 20, 'height': 177, 'weight': 70}
四、相关操作
  1. 字典不支持+、 *和比较大小,只支持比较是否相等
  2. in 和 not in - 判断字典中是否存在指定的键
键 in 字典
键 not in 字典

dog = {'name':'旺财','age':3, 'type': '土狗','price':3000, 'color':'黄色'}

print(3 in dog)  # False
print('name' in dog)  # True
  1. len
print(len(dog)
#5
  1. dict
dict(数据) - 将指定数据转换为字典

数据的要求:

1)数据本身是一个大序列
2)大序列中的每个元素是有且只有两个元素的小序列,并且小徐列中的第一个元素是可变类型的数据
data1 = ['ab',[10,20],'10']
print(dict(data1))
#{'a': 'b', 10: 20, '1': '0'}
data2 = [('age', 20), ('name', '小明')]
print(dict(data2))
五、相关方法
字典.xxx()

dict

1.字典.clear - 清空字典

例如:

dog = {'name':'旺财','age':3, 'type': '土狗','price':3000, 'color':'黄色'}
dog.clear()
print(dog)
#{}
  1. 字典.copy() - 复制字典产生一个一摸一样的新字典,并且将新的字典返回
dog = {'name':'旺财','age':3, 'type': '土狗','price':3000, 'color':'黄色'}
dog.copy()
print(dog)
#{'name': '旺财', 'age': 3, 'type': '土狗', 'price': 3000, 'color': '黄色'
3.

字典.keys() - 获取字典所有的键返回并返回

字典.value() - 获取字典所有的值返回并返回

字典.items() - 将字典中的每个键值对转换一个一个的元组作为序列中的元素返回

print(dog.keys())
print(dog.value())
print(dog.items())
4.字典1.updata(字典2) – 将字典2中的键值对全部添加到字典1中(存在的就覆盖)
dog.update({'a':10, 'b':20})
print(dog)
5.拷贝
拷贝 - 复制数据产生一个一模一样的新数据
  1. 直接赋值和拷贝的区别
a = [10, 20, 30, 40]
b = a      # 直接赋值赋的是地址
print(b)
c = a.copy()        # 拷贝是赋值原数据产生一个一模一样的新数据,并且将新的数据的地址返回
print(c)
a.append(100)
print('a:', a)
print('b:', b)
print('c:', c)
#
a: [10, 20, 30, 40, 100]
b: [10, 20, 30, 40, 100]
c: [10, 20, 30, 40]
2.浅拷贝和深拷贝
浅拷贝:列表.copy()、字典.copy()、列表[:]、copy(可变数据) (只拷贝对象本身,对象中的子对象不拷贝)
深拷贝:deepcopy(可变数据) (既拷贝对象本身,也会拷贝对象中的子对象)
from copy import copy, deepcopy
list1 = [10, 20, 30, 40]
list2 = copy(list1)     # list2 = list1.copy();  list2 = list1[:]
list3 = deepcopy(list1)
print('修改前:')
print('浅拷贝的list2', list2)
print('深拷贝的list3', list3)

print('修改后:')
list1.append(100)
print('浅拷贝的list2', list2)
print('深拷贝的list3', list3)
#修改前:
浅拷贝的list2 [10, 20, 30, 40]
深拷贝的list3 [10, 20, 30, 40]
修改后:
浅拷贝的list2 [10, 20, 30, 40]
深拷贝的list3 [10, 20, 30, 40]
print('------------------------------------------华丽的分割线------------------------------------------------')
list1 = [10, [100, 200], 20, 30]
list2 = copy(list1)
list3 = deepcopy(list1)
print('修改前:')
print('浅拷贝的list2', list2)
print('深拷贝的list3', list3)

list1.append(100)
print('修改方式1后:', list1)
print('浅拷贝的list2', list2)
print('深拷贝的list3', list3)


list1[1].append(50)
print('修改方式2后:', list1)
print('浅拷贝的list2', list2)
print('深拷贝的list3', list3)

#修改前:
浅拷贝的list2 [10, [100, 200], 20, 30]
深拷贝的list3 [10, [100, 200], 20, 30]
修改方式1后: [10, [100, 200], 20, 30, 100]
浅拷贝的list2 [10, [100, 200], 20, 30]
深拷贝的list3 [10, [100, 200], 20, 30]
修改方式2后: [10, [100, 200, 50], 20, 30, 100]
浅拷贝的list2 [10, [100, 200, 50], 20, 30]
深拷贝的list3 [10, [100, 200], 20, 30]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值