day07
字典:
1.字典是可以改变的容器,可以存储任意类型的数据
2.字典是使用键-值对进行存储.
3.字典是没有先后顺序,存储是没有顺序的
4.字典使用键值映射关系进行存储.
5.字典中的键是不能重复,
使用不可变的数据作为字典的键
字典使用的是{}括起来的,:把键和值进行分隔,
键值对之间使用,隔开.
"class" : 班级,类
字典的创建:
d ={}#空的字典
d ={"name":"名字","age":"年龄",....}
不可变的数据类型:
int float 字符串"" 元组()
字典的构造函数:dict()
dict():空字典
dict(可迭代对象):使用可迭代对象创造字典
dict(**kargs):使用关键字传参形式创造字典
>>> d = dict()
>>> d
{}
>>> type(d)
<class 'dict'>
>>> dict([ (1,2),(1,"abc") ,["abc",1] ,["1",100] ])
{1: 'abc', 'abc': 1, '1': 100}
>>> d = dict([ (1,2),(1,"abc") ,["abc",1] ,["1",100] ])
>>> type(d)
<class 'dict'>
>>> d = dict([ (1,2),(2,"abc") ,["abc",1] ,["1",100] ])
>>> d
{1: 2, 2: 'abc', 'abc': 1, '1': 100}
>>> d = dict(name = "zhuzhu")
>>> d
{'name': 'zhuzhu'}
字典的操作:
语法: v = d[键]
添加/修改数据:
添加:健在字典中不存在,就是添加数据到字典中
修改:键在字典中存在,就是修改字典中的内容.
删除数据:
del 字典[键]
>>> d
{'class1': 9, 'yuwen': 100, 'age': 18}
>>> del d["age"]
>>> d
{'class1': 9, 'yuwen': 100}
字典中in not in运算符:
in 判断键是否在字典中,在,返回值是True,否则就是False
not in 的返回值和in的返回值相反
练习:
1.将如下数据形成一个字典:
键 值
1 "春天 1,2,3月"
2 "夏天 4,5,6月"
3 "秋天 7,8,9月"
4 "冬天 10,11,12月"
2.当输入数据1,显示 "春天 1,2,3月"?
如果用户输入的数据不存在,显示"信息不存在"
字典迭代访问:
字典是可迭代对象,每次只能对键进行访问.
字典的函数:
len():返回字典中键值对的个数
max():返回的是字典中键的最大值
min():返回的是字典中键的最小值
sum():求键的和
all():求键的真值,都为真返回值为真,否则为假
any():对键进行测试,有一个为真返回值为真
字典中方法:
方法名 作用
D.clear(): 清空
D.pop(key): 移除,返回值是键对应的数据值
D.copy():拷贝,返回的是D的一个副本(浅拷贝)
D.update(D2)将字典D2 合并到D中,如果键相同,
使用D2中的新数据.
D.get(key,default = None):
返回key对应的值,如果键key不存在,
返回的是default的值.
D.items() 返回可迭代的dict_item对象
D.keys()返回可迭代的dict_key对象
D.values()返回可迭代的dict_value对象
练习:
1.输入任意的字符串,打印字符串中的字符
和字符出现的次数?
请输入数据:ABACBDDABCD
A:3次
B:3次
C:2次
D:3次
字典推导式:
使用可迭代对象生成字典的表达式
语法规则:
{ 键表达式:值表达式
for 变量 in 可迭代对象 if 真值表达式1}
#键1-9的数据,值是键的平方?
{1:1, 2:4 ,3:9 ,....}
{x : x**2 for x in range(1,10)}
练习:
1.已知有如下的列表,
L= ["tarena","xiaozhang","lisi"]
生成字典如下:
d = {"tarena":6,"xiaozhang":9,"lisi":4}
练习:
已知有两个列表:
L = [1001,1002,1003]
L1 = ["zhagsan","lisi","wangwu"]
生成如下字典:
D= {1001:"zhangsan",1002:"lisi",1003:"wangwu"}
集合:
1.集合是一个可变的容器
2.集合中的数据是唯一(不能多次出现)
3.集合无序的存储结构,集合中的数据没有先后关系
4.集合中的元素都是不可变的
5.集合是可迭代对象
6.集合是一个只有键没有值的字典.
空集合:
set()#空集合
非空集合:
s = { 1,"abcd" ,(1,2,3)}
集合的构造函数:
set()
set(可迭代对象):可以使用可迭代对象创建新集合
>>> L=[1,2,3,"abcd",(1,2,3)]
>>> set(L)
{1, 2, 3, 'abcd', (1, 2, 3)}
集合的运算:
并集| 交集& 补集- 对称子集^ 子集< 超集>
并集|:集合1 | 集合2
最终生成的集合,既包含集合1 也包含集合2
交集&:最终生成的集合是集合1 和集合2 公共元素
补集-: S1-S2:包含S1但是不包含S2
对称子集^:
S1 < S2 :S1是S2子集
S2 > S1 : S2是S1的超集
== != 集合相等/不等
S1={1,2,3}
S2 = {1,2,3,4}
S1 == S2 -->False
S1 != S2 --->True
in和not in
使用规则和集合,字符串,元组,列表一样,
在集合中,in-->True
not in-->False
集合中:
len():求集合的长度
max():最大值
min():最小值
sum():求和
all():使用规则和列表一样
any():使用规则和列表一样
练习:
S1 经理有:曹操,刘备,孙权
S2 技术员:曹操,孙权,张飞 关羽
1.即是经理也是技术员的? S1 & S2
2.是经理但是不是技术员? S1-S2
3.是技术员但是不是经理? S2-S1
4.张飞是经理? "张飞" in S1
5.身兼一职的都有谁? S1 ^ S2
6.经理和技术员总共多少人? len(S1|S2)
作业:
1.写一个程序,模拟一下电子词典:
1)输入单词和解释,单词作为键,解释作为值,
将数据存放在字典中,当输入空格,输入结果
2)输入要查找的词,给出的是单词的解释,
如果单词不存在,提示"该单词不存在"
2.学生管理项目:
输入学生的姓名,年龄,成绩,每个学生的信息存
在字典中,(学员信息需要手动输入)
[{"name":A,"age":20,"score":100},
{"name":"zhangsan","age":22,"score":100}]
1)打印出存学员信息的列表:
2)按照如下格式打印:
+--------+------+-------+
| name | age | score |
+--------+------+-------+
| A | 20 | 100 |
|zhangsan| 22 | 200 |
+--------+------+-------+