一.字典
字典是容器类型(序列),以键值对作为元素
语法{key1:value1,key2:value2....}
键(key):字典中key唯一,每一个都不同,可用数字,布尔,字符串,元祖.推荐使用字符串
值(value):可以不唯一,可以是任何类型的数据
1.声明字典
dict1 = {'name':'小黄','age':20}
2.查
a.语法:字典[key]-----通过key获取值
dict1 = {'name':'小黄','age':20}
print(dict1['name'])
#输出结果是:小黄
b.语法:字典.get(key)-----如果key不存在,不会报错,而是返回None
dict1 = {'name':'小黄','age':20}
print(dict1.get['name'],dict1.get('money'))
#输出结果是:小黄 None
c.遍历字典
dog = {'name':'旺财','color':'yellow','age':3}
for key in dog:
print(key)
#遍历字典直接取到的是字典所有key值
3.改
语法:字典[key] = 新值
key本来就存在的
dict1 = {'name':'小黄','age':20}
dict1['name']='小灰'
print(dict1)
#输出结果是:{'name': '小灰', 'age': 20}
4.增
语法:字典[key] = 值
key本来不存在
dict1 = {'name':'小黄','age':2}
dict1['type']='仓鼠'
print(dict1)
#输出结果是:{'name': '小灰', 'age': 2,'type':'仓鼠'}
5.删(删除的是键值对)
a.del 字典[key]
dict1 = {'name':'小黄','age':20}
del dict1['age']
print(dict1)
#输出结果是:{'name': '小黄'}
b. 字典.pop(key)
dict1 = {'name':'小黄','age':20}
dict1.pop('age')
print(dict1)
#输出结果是:{'name': '小黄'}
二.字典的相关运算
1.字典不支持'+'和'*'
2.in 和 not in 判断key是否存在
返回值是布尔值
3.len()
- 字典.clear()
删除字典中所有的元素 - 字典.copy()
拷贝字典中所有的元素,放到一个新的字典中
dict1 = {'a':1,'b':2}
dict2 = dict1 #将dict1中的地址赋给dict2,两个变量指向同一块内存区域
dict3 = dict1.copy() #将dict1中的内容复制到一个新的内存区域中,将新的地址给dict3
dict1['a']=100
print(dict2,dict3)
#输出结果是:{'a': 100, 'b': 2} {'a': 1, 'b': 2}
6.dict.fromkeys(序列,默认值=None)
将序列中的每个值作为key,默认值为value,创建一个新的字典.默认值可以不写,写的话只能写一个.
- 字典.keys()
获取字典中所有的key,以dict_keys的形式返回
8.字典.values()
获取字典中所有的value
dict1 = {'a':1,'b':2}
dict1.values()
print(dict1)
#输出结果:{'a': 100, 'b': 2}
- 字典.items()
将字典中所有的键值对,转换成一个一个的元组,key作为元组的第一个元素,value作为元组的第二个元素,这种方式不推荐使用.
10.字典.setdefault(key,默认值=None)
给字典添加键值对,如果key本身存在,这个方法无效
11.字典1.update(字典2)
将字典2中的键值对更新到字典1中
更新方式: 如果字典2中的key,在字典1中是存在的,就用字典2中的值更新字典1中的值,不存在就添加到字典1中
dict1 = {'aa':1,'bb':'abc','cc':True}
dict1.update({'aa':99,'dd':'你好'})
print(dict1)
#输出结果是:{'aa': 99, 'bb': 'abc', 'cc': True, 'dd': '你好'}
四.列表和字典综合使用
1.列表中有字典
student_system = [
{'name':'ymj','age':24,'tel':1122,'native_place':'兰州'}
]
2.字典中有列表
py_class = {
'class_name':'python1806','students':[
{'name':'student1','age':20,'id':'001'},
{'name': 'student2', 'age': 20, 'id': '001'},
{'name': 'student3', 'age': 20, 'id': '001'}
]
}
练习:输入一个学生的姓名,根据姓名去删除对应的学生
py_class = {
'class_name':'python1806','students':[
{'name':'student1','age':20,'id':'001'},
{'name': 'student2', 'age': 20, 'id': '001'},
{'name': 'student3', 'age': 20, 'id': '001'}
]
}
list1 =py_class['students']
name1 = input('请输入要删除的姓名')
for dict1 in list1[:]:
if name1 == dict1['name']:
list1.remove(dict1)
print(py_class)
#输入:student1
#输出结果是:{'class_name': 'python1806', 'students': [{'name': 'student2', 'age': 20, 'id': '001'}, {'name': 'student3', 'age': 20, 'id': '001'}]}
五.集合(set)
集合是python中的一种容器类型:无序的,可变的,值唯一.和数学中的集合差不多
除了可变的类型,其他的都行,数字,布尔,字符串是可以的(和字典的key的要求一样)
1.声明一个集合
set1 = {1,'abc'}
print(set1,type(set1))
#输出结果是:{'abc', 1} <class 'set'>
将其他的序列转换成集合,自带一个去重功能
2.查(获取集合中的元素)
集合是不能单独获取其中的某一个元素的
只能通过遍历获取每一个元素
for item in set1:
print(item)
#输出结果是:abc 1
3.增(添加元素)
集合.add(元素)
b.集合1.update(集合2):将集合2中的元素,添加到集合1中
集合.update()
4.删
集合.remove(元素)
删除所有的元素----集合.clear()
5.改(改不了)
6.数学相关的集合运算
a.判断包含情况:
集合1>=集合2:集合1中是否包含集合2
集合1<=集合2:集合2中是否包含集合1
print({1,2,3,4,5}>={2,3,1})
#输出结果是:True
b.求并集 : |
c.求交集: &
求两个集合的公共部分
d.求差集: -
e.求补集:^
求两个集合除了公共部分以外的部分