字典
键值对的无序序列,成对存储,通过键操作值
键:整数、浮点数、字符串、元组
值:任意可重复
创建字典
#(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)