字典
一.定义:
字典是一种可变的容器,可以存储任意类型的数据
字典中的每个数据都是用‘键(key)’进行索引的,而不像序列(str,list,tuple)可以用整数进行索引
字典的存储是无序的
字典中的数据以键(key)-值(value)对形式进行存储
字典的键不能重复,且只能用不可变类型做为字典的键
二.创建字典的字面值方式
字典的表示方式以{}括起来,以冒号(:)分隔键值对,各个键值对之间使用逗号分隔开
创建空的字典
d = {}
创建字典的构造函数dict
dict() #生成一个空的字典等同于{}
dict(iterable) #通过可迭代对象创建一个字典
dict(**kwargs) #关键字传参的形式生成一个字典
注:字典的键必须为不可变类型的值
可变的类型:list(列表),dict(字典),set(集合)
三.字典的基本操作
1.字典的键索引
语法:
字典[键]
作用:
用来获取字典键所对应的值
2.字典添加和修改字典的元素
语法:
字典[键]=值
说明:
键不存在时,创建键,并让键绑定对应的值
键存在时,修改键绑定的值
3.删除字典的元素
del 语句
语法:
del 字典[键]
4.字典的键判断in,not in 运算符
可以用in 运算符判断一个键是否存在于字典中,如果存在返回True, 如果不存在返回False not in与之相反
练习:
写程序实现以下需求:
键如下数据形成一个字典seasons
键 值
1 ========>‘春季有1,2,3月’
2 ========>‘夏季有4,5,6月’
3 ========>‘秋季有7,8,9月’
4 ========>‘冬季有10,11,12月’
让用户输入一个整数代表这个季节,打印这个季节对应的信息,如果用户输入的信息不存在于字典内,则提示用户信息不存在
1 d={1:'春季有1,2,3月',2 2:'夏季有4,5,6月',3 3:'秋季有7,8,9月',4 4:'冬季有10,11,12月'}5 print(d)6 n=int(input("请输入一个整数"))7 if n ind:8 print(d[n])9 else:10 print("用户信息不存在")
四.字典的迭代访问
l=input('请输入一段字符串')
d={}
forn inl:
ifn not ind:
d[n]=1
else:
d[n]+=1
fork ind:
print(k,':',d[k],'次')
练习:
输入一段字符串,打印出这个字符串中出过的字符以及出现过的次数
如:
输入:abcdabcdaba
打印如下:
a:4次
b:3次
c:2次
d:2次
注:不强调打印顺序
1 l=input('请输入一段字符串')2 d={}3 for n inl:4 if n not ind:5 d[n]=1
6 else:7 d[n]+=1
8 for k ind:9 print(k,':',d[k],'次')
五.可以用于字典的函数
Len(x) max(x) min(x) any(x)
六.字典的内置方法
1.dict.clear()
删除字典中所有的元素
这个方法没有参数没有返回值
2.dict.fromkeys(seq[,value])
创建一个新的字典,以序列seq中的元素作为字典的键,value为字典所有键对应的初始值
参数:
seq – 字典键值列表
value – 可选参数,社会键序列(seq)的值
返回值:
该方法返回一个新的字典
3.dict.get(key,default = None)
返回指定键的值,如果值不在字典中返回默认值None
参数:
Key-字典中要查找的键
Default-如果指定键的值不存在时,返回该默认值返回值
返回值:
返回指定键的值,如果值本在字典中返回默认值None
4.dict.items()
以列表返回可迭代的(键,值)元组
没有参数
返回值:
返回可遍历的(键,值)元组数据
5.dict. keys ()
以列表返回一个字典所有的键
没有参数返回值:
返回一个字典的键
6、dict. update (dict2)
把字典dict2的键/值对更新到dict里
参数:
dict2 添加到指定字典dict里的字典
返回值:
该方法没有任何返回值
7.dict. values ()
以列表返回字典中的所有的值
没有参数
返回值:
返回字典中所有的值。
8.pop (key. [, default])
删除字典给定键key所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值
参数:
key:要删除的键值
default:如果没有key,返回default值。
返回值:
返回值被删除的值。
9、popitem()
随机返回并删除宇典中的对键和值
没有参数
返回值:
返回一个键值对(key, value)形式
七.字典与列表比较
都是可变的容器
索引方式不同,列表用整数索引,字典用键索引
列表的存储是有序的,字典的存储是无序的
字典的插入,删除,修改的速度快于列表(重点)
练习:
任意输入很多学生的姓名,年龄,成绩,每个学生的信息存入到字典中,然后再放在列表内每个学生的信息需要手动输入:
如:
请输入姓名:tarena
请输入年龄:15
请输入成绩:99
请输入姓名:china
请输入年龄:70
请输入成绩:98
请输入姓名:#结束输入
内部存储格式如下:
Infors = [{“name”:”tarena”,”age”:15,”score”:99},{name”:”china”,”age”:70,”score”:98}]
打印以上的列表
按如下表格打印学生信息
姓名
年龄
成绩
Tarena
15
99
China
70
98
1 infors=[]2 whileTrue:3 d ={}4 na=input("请输入姓名:")5 if notna:6 break
7 d["name"]=na8 ag=input("请输入年龄:")9 d["age"]=ag10 sc=input("请输入成绩:")11 #d = dict.fromkeys(na,sc)
12 d["score"]=sc13 infors.append(d)14 j=1
15 k=016 while j<=len(infors)+3:17 if j==1:18 print("+-------+-------+-------+")19 elif j==2:20 print("| 姓名 | 年龄 | 成绩 |")21 elif j
25 elif j==len(infors)+3:26 print("+-------+-------+-------+")27 j+=1
28 #print(infors)
29 #print("+---------------+----------+----------+")
30 #print("| 姓名 | 年龄 | 成绩 |")
31 #print("+---------------+----------+----------+")
32 #for d in infors:
33 #n = d['name'].center(15)
34 #a = str(d['age']).center(10)
35 #s = str(d['score']).center(10)
36 #print("|%s|%s|%s|" % (n, a, s))
37 #print("+---------------+----------+----------+")
打印名片管理系统:
要求:
添加一个新的名片
删除一个名片
修改一个名片
查询一个名片
显示所有名片
退出系统
提示:card_infors = [{‘name’:’xx’,’qq’:xxx,’weixin’:xxx,’addr’:’xxx’},
{‘name’:’xx’,’qq’:xxx,’weixin’:xxx,’addr’:’xxx’}
]
1 print("\t\t打印名片系统")2 l=[]3 hd="+---------------+----------+----------+----------+"
4 zh="| 姓名 | QQ | 微信 | 地址 |"
5 a=06 tt="jkl"
7 while a<=6:8 k =09 d ={}10 a = int(input("1.添加 2.删除 3.修改 4.查询 5.显示所有 6.保存信息 7.退出"))11 if a == 1:12 na=input("名字:")13 qq=input("QQ:")14 wx=input("weixin")15 ad=input("addr:")16 d['name']=na17 d['qq']=qq18 d['weixin']=wx19 d['addr']=ad20 l.append(d)21 elif a==2:22 while k==0:23 i =024 an = input("请输入要删除的名字(可输入jkl返回)")25 if an==tt:26 k=1
27 else:28 for dl inl:29 if an == dl['name']:30 l.pop(i)31 print("删除成功")32 k = 1
33 else:34 i += 1
35 if k ==0:36 print("输入错误名字")37 elif a==3:38 while k==0:39 i =040 d ={}41 an = input("请输入要修改的名字(可输入jkl返回)")42 if an==tt:43 k=1
44 else:45 for dl inl:46 if an == dl['name']:47 na = input("修改后名字:")48 qq = input("修改后QQ:")49 wx = input("修改后weixin")50 ad = input("修改后addr:")51 d['name'] =na52 d['qq'] =qq53 d['weixin'] =wx54 d['addr'] =ad55 l[i] =d56 print(hd)57 print(zh)58 print(hd)59 an = l[i]['name'].center(15)60 pp = l[i]['qq'].center(10)61 xw = l[i]['weixin'].center(10)62 da = l[i]['addr'].center(10)63 print("|%s|%s|%s|%s|" %(an, pp, xw, da))64 print(hd)65 k = 1
66 else:67 i += 1
68 if k ==0:69 print("输入错误名字")70 elif a==4:71 while k==0:72 i =073 a = int(input("请输入要查询的序号(可输入-1退出)"))74 if a==-1:75 k=1
76 else:77 if a <= len(l) + 1:78 print(hd)79 print(zh)80 print(hd)81 dl = l[a - 1]82 an = dl['name'].center(15)83 pp = dl['qq'].center(10)84 xw = dl['weixin'].center(10)85 da = dl['addr'].center(10)86 print("|%s|%s|%s|%s|" %(an, pp, xw, da))87 print(hd)88 k = 1
89 else:90 print("请输入小于%d的正整数序号", len(l) + 1)91 elif a==5:92 print(hd)93 print(zh)94 print(hd)95 for dl inl:96 an = dl['name'].center(15)97 pp = dl['qq'].center(10)98 xw = dl['weixin'].center(10)99 da = dl['addr'].center(10)100 print("|%s|%s|%s|%s|" %(an, pp, xw, da))101 print(hd)102 #print(l)
103 elif a==6:104 f = open('./mingpian.txt', 'w', encoding='utf-8')105 for dl inl:106 an = dl['name'].center(15)107 pp = dl['qq'].center(10)108 xw = dl['weixin'].center(10)109 da = dl['addr'].center(10)110 x=an+pp+xw+da111 print(x)112 f.write(x)113 f.close()114 elif a==7:115 break
116 else:117 print("输入错误,退出")118 break
集合
集合是可变的序列容器
集合内的数据对象都是唯一的(不能重复多次的)
集合是无序的存储结构,集合中的数据没有先后顺序关系
集合内的元素必须是不可变对象
集合是可迭代对象
集合是相当于只有键没有值的字典
创建集合的构造函数
Set() 创建一个空集合对象(不能用{}来创建空集合)
Set(iterable) 用可迭代对象来创建新的集合对象
注:
非空集合用{}括起来,内部的各个元素用(,)分隔开
创建非空集合
集合的添加与删除操作
添加:
add方法:把要传入的元素做为一个整个添加到集合中
updata方法:是把要传入的元素拆分,作为个体传入到集合中删除
remove 删除集合中要删除的元素
集合中的查看
集合也是可迭代对象可以用for循环遍历查看其中的元素
集合的运算:
交集& 生成两个集合的交集
并集| 生成两个集合的并集
补集- 生成两个集合的补集
对称补集^ 生成两个集合的对称补集
子集
超集> 判断一个集合是另一个集合的超集