Python学习--Day 11
- 视频来源:python视频 900集
077.回顾上午内容
- 与面向对象的class相比,字典可以在存储少量的特征数据时发挥较大的作用。
078.字典的添加
- 增加元素、修改元素
格式:dict名称[key] = value
,key值不重复则添加,key值重复则发生修改。
dict6 = {}
dict6['name'] = 'Lucy'
print(dict6)
dict6['name'] = 'Tom' # 同名的key不会再次增加,会替换
print(dict6)
- 实战项目
弹幕有人不理解为啥还要放到database列表中,我个人觉得老师是在模拟以后的开发过程,用字典短暂接收,再以字典的形式传输给数据库,数据库暂时没学就先用的列表,我理解是这样的。
database = []
while True:
username = input('please input username:')
password = input('please input password:')
# repasseord = input('please input repassword:')
email = input('please input email:')
phone = input('please input phone:')
user = {}
user['username'] = username
user['password'] = password
user['email'] = email
user['phone'] = phone
# 保存到database列表中
database.append(user)
ack = input('continue?y/n')
if ack == 'n':
break
print(database)
079.字典的item
- 字典的查找
特点:key在字典中是唯一的,value不唯一。
通过dict1[key]
找到value的内容,key必须与创建的时候一样。
字典中找元素与列表不同,字典中没有下标的说法,仅列表和元组有下标。
dict1 = {'1':'张三','2':'李四','3','王五'}
dict['2'] #注意一定要使用'2'
- 字典的遍历(字典与for循环)
前两个代码是尝试遍历的例子,可以作为扩展知识学习。
dict2 = {'张三':100,'李四':45,'王五':78}
for key,value in dict2
print(key,value)
# 输出结果是:
# 张 三
# 李 四
# 王 五
# 遍历失败,仅仅遍历了key
for i in dict1
print(i)
# 输出结果是:
# 1
# 2
# 3
# 仅仅遍历了key
- 字典内的函数:items()、values()、keys()
- items()
items()
将字典转回成列表中包含元组的形式。
dict2 = {'张三':100,'李四':45,'王五':78}
print(dict2.items())
# 输出结果:dict_items([('张三',100),('李四',45),('王五',78)])
- 使用items()进行字典的遍历
for key, value in dict2.items()
借用items()能够将字典变为元组或列表的操作,再使用for i in 可遍历对象
对内容进行遍历。
谨记:dict.items()
是一个列表或元组。
如下是两个遍历方法,第二种更常用。
for i in dict2.items():
print(i)
# 这是遍历的第一种方法
# 由于i是一个元组的格式,我们就会再次得到第二种改进的方法
for key,value in dict2.items():
print(key,value)
# 遍历的第二种方法
080.字典之获取操作(get,items,values,keys)
- values()——取出字典中的所有值,并将这些值放到一个列表中。
Attention:因为是放到列表中,可以使用for对dict.values()
进行遍历。
result = dict2.values()
print(result)
for i in dict2.values():
print(i)
- 同理,keys(),获取所有的Key并将他们放到列表之中。
- 字典使用in,寻找的内容是key,判断内容有没有在key中出现,与value无关。
dict1 = {'1':'张三','2':'李四','3','王五'}
ans = '1' in dict1
print(ans) # true
ans1 = '张三' in dict1
print(ans1) #False
-
提供了错误的key,并使用
dict[key]
(key不存在),会报错:KeyError: '你输入的错误的key的名称'
-
字典的内置函数get()——
dict.get(key)
,找到返回Value,取不到值就返回None不会报错。
dict.get(key [,default])
——default作为默认值,如果没有key就返回默认值。
get照比in更加常用 -
get()特定值的查找。
-
values(),右边一列的查找。
-
keys(),左边一列的查找。
-
items(),一对一对找
081.字典之删除操作
- 不依赖于字典的方法——del,根据key找元素
del dict[key]
——删除key对应的元素,如果key不存在,返回一个KeyError。
dict1 = {'张三':100,'李四':45,'王五':78}
del dict1['王五']
print(dict1)
# 输出结果是:{'张三':100,'李四':45}
- 字典内置的函数——pop()
pop(key[,default])
——根据key删除对应的键值对,删除成功就返回key对应的value;如果输入的key不存在,默认返回None,指定了default部分就返回default的内容。
小结:pop()更加安全,比报错的del更好,开发起来用的更顺手。
dict1 = {'张三':100,'李四':45,'王五':78}
result = dict1.pop('李四')
print(result) # 打印结果是45
print(dict1)
- popitem()——随机删除字典中的键值对(真正运行时,一般是从末尾删除元素)
dict1.popitem()
——‘随机’删除元素,不用指定键值对,直接调用就行。 - clear()—— 将字典清空
- 其他的内置方法:update()——没有返回值,将列表中的数据更新,类似列表的+
dict1.update(dict2)
——将dict1中和dict2中都有的key的value统一变成dict2中的value,dict1中没有的从dict2中获取并加入。
dict1 = {0:'tom',1:'jack',2:'Lucy'}
dict2 = {0:'lily', 4:'rudy'}
dict1.update(dict2)
print(dict1)
# 输出结果:
# {0:'lily',1:'jack',2:'lucy',4:'rudy'}
- 字典的+是不被支持的,两个字典的合并使用update()就行。
- fromkeys()——将列表转成字典
用法:dict.fromkeys(list1)
——注意,前面的调用对象必须是dict,不能是dict类型的dict1。
dict.fromkeys(list1,index)
——将所有的list1中的对象的value赋值为index。
fromkeys(seq[,default])
——将seq转变为字典的形式,如果没有指定默认的value则用None,指定了default则用default替代None这个value值。
list1 = ['aa','bb','cc']
new_dict = dict.fromkeys(list1)
print(new_dict)
# 输出结果:
# {'aa':None, 'bb':None, 'cc':None}
new_dict = dict.fromkeys(list1,10)
print(new_dict)
# 输出结果:
# {'aa':10, 'bb':10, 'cc':10}
082.回顾
回顾了上面讲过的字符串、列表、元组、字典等等。
数据类型 | 列表 | 元组 | 字典 |
---|---|---|---|
关键字 | list | tuple | dict |
特点1 | 保存多个元素,元素有顺序 | 保存多个元素 | 以键值对的形式保存元素 |
特点2 | 可以通过下标找到对应的元素 | 不可以增删改,可以查询 | 支持键值对的增删改查 |
内置函数 | append、extend、insert、remove、pop、clear、sort、reverse、index、count | index、count | dict[key] = value、pop、popitem、clear、items、values、keys、fromkeys |
083.集合操作之添加和删除
- 集合的关键字set,是一个无序的、不重复的元素
- 集合声明:
s1 = set()
,字典是成对出现的,而集合是单独出现的。
# dict {key:value, key:value, key:value}
# set {元素1,元素2,元素3}
- 注意,创建空集合只能使用set(),使用{}是创建字典
- 但是可以使用set{1,3,7}创建集合,因为放进去的不是键值对。
- 还可以使用类型转换使列表或元组变为集合,转变过程中自动去除重复项目,是数字的话还会自动排序。【面试的应用:列表的快速去重可以使用集合】
list1 = [1,2,4,5,6,3,4,5,6,4,4]
s3 = set(list1)
print(s3)
# 输出结果
# {1, 2, 3, 4, 5, 6}
- 集合的增加元素:add()
而且输入信息后再返回,通常是无顺序的。
s1 = set()
s1.add('hello')
s1.add('lucy')
s1.add('pjuy')
print(s1)
# 输出结果:
# {'hello', 'lucy', 'pjuy'}
- update()
set1.update(tuple1)
将元组或列表的内容逐次添加到集合中。
s1 = {'hello', 'lucy', 'pjuy'}
t1 = ('林志玲','言承旭')
s1.update(t1)
print(s1)
# 输出内容
# {'pjuy', '林志玲', 'lucy', '言承旭', 'hello'}
# 将t1内的元素加入到集合中
s1.add(t1)
print(s1)
# 输出内容:
# {'pjuy', ('林志玲', '言承旭'), '林志玲', 'lucy', '言承旭', 'hello'}
# 此时是将t1元组作为一个整体加入到集合中
- 删除remove()、pop()、clear()、discard()
set1.remove(ele)
——若ele在set中,将ele从集合中移除;如果元素ele不存在,就报错:KeyError
set1.pop()
——随机删除,随机删除一个元素。
set1.clear()
——将集合清空
set1.discard()
——类似remove,但在移除不存在的元素的时候不会报错,也就是说对于集合的删除元素,使用discard()。
花书到了,粗略看一眼差点吓死自己。。。好多数学符号都忘记了啊,还有好多是根本就没见过的。对数学的恐惧又一次袭来。今天还顺便收拾了旧物,发现自己左一本右一本的数学错题集都是一两页的,这也就不难解释为什么自己的数学从高中以来就有问题,再也不敢觉得自己高考的131是失误了。。