20201119-python基础知识-day4

字典

键值对的无序序列,成对存储,通过键操作值
键:整数、浮点数、字符串、元组
值:任意可重复
创建字典

#(1)通过{},dict创建
>>> a = {"name":"wy","age":20,"ij":[2,3,5]} #{}创建用:,而且键要用字符串
>>> a
{'name': 'wy', 'age': 20, 'ij': [2, 3, 5]}
>>> b = dict(name="wy",age=20,ij=[2,3,5]) #用dict创建用=,键不用字符串
>>> b
{'name': 'wy', 'age': 20, 'ij': [2, 3, 5]}
>>> c = dict([('name','wy'),('age',18)]) #列表套元组
>>> c
{'name': 'wy', 'age': 18}
#(2)通过zip()创建字典对象
>>> k = ['name','age','job']
>>> v = ['wy','18','ji']
>>> d = dict(zip(k,v))
>>> d
{'name': 'wy', 'age': '18', 'job': 'ji'}
#(3)通过fromkeys创建值为空的字典
>>> a = dict.fromkeys(['name','age','job'])
>>> a
{'name': None, 'age': None, 'job': None}

字典元素的访问

>>> a
{'name': 'wy', 'age': 18, 'job': 'stu'}
>>> a['name']  #通过键获得value
'wy'
>>> a['jibbu']
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    a['jibbu']
KeyError: 'jibbu'
>>> a.get('name')
'wy'
>>> a.get('ffr')  #通过get获得(推荐使用)
>>> print(a.get('ffr'))
None
>>> a.get('ffr','不存在')
'不存在'
>>> a.items()  #获得所有的键值对
dict_items([('name', 'wy'), ('age', 18), ('job', 'stu')])
>>> a.keys()  #列出所有的键
dict_keys(['name', 'age', 'job'])
>>> a.values() #列出所有的值
dict_values(['wy', 18, 'stu'])
len 键值对的个数
>>> 'name' in a  #检测一个“键”是否在字典中
True

字典元素的添加和修改删除

#给字典新增“键值对”,如果键已经存在,则覆盖旧的键值对,如果键不存在,则新增键值对
>>> a
{'name': 'wy', 'age': 18, 'job': 'stu'}
>>> a['jdiebfu']='123456'
>>> a
{'name': 'wy', 'age': 18, 'job': 'stu', 'jdiebfu': '123456'}
>>> a['name']='wwy'
>>> a
{'name': 'wwy', 'age': 18, 'job': 'stu', 'jdiebfu': '123456'}
#使用update()将新字典中所有键值对全部添加到旧字典上,如key有重复,则直接覆盖
>>> b = dict(name='up',b=8,c=3)
>>> a.update(b)
>>> a
{'name': 'up', 'age': 18, 'job': 'stu', 'jdiebfu': '123456', 'b': 8, 'c': 3}
#字典中元素的删除
>>> del(a['name'])
>>> a
{'age': 18, 'job': 'stu', 'jdiebfu': '123456', 'b': 8, 'c': 3}
>>> b = a.pop('age')
>>> b
18
>>> a
{'job': 'stu', 'jdiebfu': '123456', 'b': 8, 'c': 3}
>>> a.clear()
#popitem():随机删除和返回该键值对
>>> a = {'name':'wy','age':18,'job':'stu'}
>>> a.popitem()
('job', 'stu')
>>> a
{'name': 'wy', 'age': 18}
>>> a.popitem()
('age', 18)
>>> a
{'name': 'wy'}

序列解包(方便对多个变量赋值)

>>> x,y,z = (20,30,40)
>>> (a,b,c) = (20,30,40)
>>> [d,e,f] = [1,2,3]
>>> a;b;c;d;e;f
20
30
40
1
2
3
#字典
>>> s = {'name':'wy','age':18,'job':'stu'}
>>> a,b,c = s
>>> a;b;c
'name'
'age'
'job'
>>> d,e,f = s.values()
>>> d;e;f
'wy'
18
'stu'
>>> h,i,j = s.items()
>>> h;i;j
('name', 'wy')
('age', 18)
('job', 'stu')

小练习

r1 = {'name':"高小一",'age':18,'salary':30000,'city':'bj'}
r2 = {'name':"高小二",'age':19,'salary':20000,'city':'sh'}
r3 = {'name':"高小三",'age':20,'salary':10000,'city':'sz'}

tb = [r1,r2,r3]

#获得第二行的人的薪资
print(tb[1].get('salary'))

#遍历所有的薪资
for i in range(len(tb)):
    print(tb[i].get('salary'))

#打印表的所有数据
for i in range(len(tb)):
    print(tb[i].get('name'),tb[i].get('age'),tb[i].get('salary'),tb[i].get('city'))

字典核心底层原理
查看hash值,变为数组间的值,放进数组,不够就扩容
在这里插入图片描述
取的过程也类似,通过hash算出来一串数字,和存的时候数字一样,取出来的时候不一定是你要的,再调用hash,如果算完之后相等,认为找到了直接返回,如果不一样再找直到找到的值完全一致。
在这里插入图片描述

集合

无序可变,元素不能重复,集合底层是字典,集合的所有元素都是字典中的键,不能重复且唯一

#创建 {}或者set函数
>>> a = {25,86,84,24,'kki'}
>>> a
{84, 86, 24, 25, 'kki'}
>>> a.add(84)
>>> a
{84, 86, 24, 25, 'kki'}
>>> a = ['a','e','p']
>>> b = set(a)
>>> b
{'p', 'a', 'e'}
#删除
>>> a.remove('a')
>>> a.clear()
>>> a
[]

在这里插入图片描述

选择结构

#整数作为条件表达式为TRUE
if 3:
    print("OK")

#空列表作为条件表达式为False
a = []
if a:
    print("空列表,False")

#字符串作为条件表达式,空字符串是False,非空字符串为True
ss = "False"
if ss:
    print("非空字符串,True")

s = ""
if s:
    print("空字符串,FALSE")

#等式为TRUE
c = 9
if 3<c<20:
    print("3<c<20")
if c>3 and c<20:
    print("c>3 and c<20")

#布尔值
if True:
    print("True")
if False:
    print("布尔值为False,False")

注意:if语句中不能出现=
在这里插入图片描述

print("s是小于10的数字" if int(s)<10 else "s是大于等于10的数字")
#测试多分支结构
x = int(input("请输入x坐标"))
y = int(input("请输入y坐标"))
if x==0 and y==0:
    xx = '原点'
elif x==0 and y !=0:
    xx = 'y轴'
elif x!=0 and y==0:
    xx = 'x轴'
elif x>0 and y >0:
    xx = '第一象限'
elif x>0 and y<0:
    xx = '第二象限'
elif x<0 and y<0:
    xx = '第三象限'
elif x<0 and y>0:
    xx = '第四象限'
print("{0}为{1}".format((x,y),xx))
#选择结构
score = int(input("请输入一个0-100之间的数字"))
if score>100 or score<0:
    score = int(input("请重新输入一个0-100之间的数字"))
else:
    if score>=90:
        grade = 'A'
    elif score>=80:
        grade = 'B'
    elif score>=70:
        grade = 'C'
    elif score>=60:
        grade = 'D'
    else:
        grade = 'E'
    print("分数为{0},等级为{1}".format(score,grade))

#另外一种比较简单的方法,提前定义等级然后索引
score = int(input("请输入一个0-100之间的数字"))
degreen = 'ABCDE'
num = 0
if score>100 or score<0:
    score = int(input("请重新输入一个0-100之间的数字"))
else:
    num = score//10
    if num<6:num=5
    print('分数是{0},等级是{1}'.format(score,degreen[9-num]))

循环结构

循环体里面要写一个停止循环的东西
while和for循环

#while循环
num = 0
while num <=10:
    print(num,end='\t')
    num +=1
#计算1-100之间的累加和
num2=0
sum_all = 0
while num2<=100:
    sum_all+=num2
    num2+=1
print("1-100所有数的累加和:",sum_all)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值