字典
可变的(可以增删改),无序的(不能使用下标),有限的,键不重复的对象集合
存的数据是以键值对的形式出现的
除了列表以外,字典也许是Python之中最灵活的内置数据结构类型,
如果把列表看做是有序的对象集合,那么就可以把字典当成是无序的集合。
它们主要的差别在于:字典当中的元素是通过键来存取的,
而不是通过偏移存取。对字典进行索引是非常快速的搜索操作,
Python采用最优化的散列算法来寻找键,因此使用键查找的速度非常快。
键值对:(key:value):
key是形式,value才是真正要存的内容
key理论上可以是任何不可变的数据类型,但是一般使用字符串
value可以是任何数据类型
1.创建一个字典
dict1 = {'1':1,'abc':2}
2.将其他类型转换成字典
dict3 =dict(([1,2],[2,3]))
dict4 =dict([(1,2),(2,3)])
3.查找字典元素(两种方法)
person ={'name':'路飞','age':17,'face':90}
第一种.如果key值不存在,会报KeyError
print(person['name'])
第二种.如果key值不存在,会返回None
print(person.get('name'))
print(person.get('aaa'))
注意:如果key值确定存在,使用[]的语法,不确定得话使用get()方法
4.增加、修改 字典元素
通过key获得字典元素,然后赋值,当key存在的时候,就是修改值
不存在的时候增加值
person = {'height':1.8}
person['height'] = 1.7
person['age'] = 28
5.删除字典
1.del dict[key]删除的键必须存在不然会报错Keyerror
del person['age']
(2).dict.pop(key)
person.pop('height')
6.相关的数组属性
dict.keys():获得字典所有的key,返回的是dict_keys,但是可以把它当成列表使用
dict.values():获得字典所有的值
dict.items():将字典所有的键值对转换成一个一个元组,key作为第一个元素,value作为第二个元素
student_dict = {'name':'小梦' , 'student_id':'py1805','scores':{'english':100, 'chinses':60}}
print(student_dict.keys())
dict_keys(['name', 'student_id', 'scores'])
7.遍历字典
for key in student_dict:
print(key,student_dict[key])
for key in student_dict.keys():
print(key,student_dict[key])
不推荐使用 ,对CPU消耗较大
for k,v in student_dict.items():
print(k,v)
for v in student_dict.values():
print(v)
8.列表中有字典,字典中有字典,字典中有列表
student_data =[{'student1':'小明','sex1':'male','age1':'18','phone1':12345678},
{'student2':'小红','sex2':'female','age2':'19','phone2':1234576789},
]
student_data1 ={'student1':{'name':'小李','age':18},
'student2':{'name':'小梦','age':20}
}
9.dict.fromkeys(序列,value)序列中的元素作为key,value作为值
new_dict =dict.fromkeys(['abc','123','lll'],100)
print(new_dict)
{'abc': 100, '123': 100, 'lll': 100}
10.in
obj in 字典,判断字典中是否有存在的key
11.update
dict1.update(dict2):使用字典2的键值对更新字典1的键值对
如果字典2中对应的键值对在字典1中不存在就添加,存在就更新
dict1 = {1:'a','2':'b'}
dict2 = {1:'b','3':'ccc'}
dict1.update(dict2)
print(dict1)
{1: 'b', '2': 'b', '3': 'ccc'}
和list比较,dict有以下几个特点:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
而list相反:
查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
元组
元组是不可变的列表,列表中除了可变的操作外,其他操作都适用于元组
元组值:使用小括号()
增删改不能用于元组
方法
len
in ,not in
+ , *
集合
集合也是一种容器类型的数据类型(序列):数据放在{ }中,多个之间用逗号隔开列如:{1,2,'a'}
集合是无序的,可变的,元素不能重复
集合可以进行数学中集合相关的操作:判断是否包含交集,并集,差集,补集
1.怎么创建一个集合
set1 ={1,2,3,3,21}
print(set1,type(set1))
{1, 2, 3, 21} <class 'set'>
2.将其他数据转换成集合,自带一个去重的功能
set2 = set('abc1233312')
print(set2)
{'c', '1', 'b', '3', 'a', '2'}
3.增删改查
查:通过遍历
注意集合没有办法单独获得某一个元素
set1 ={1,2,3,3,21}
for item in set1:
print(item)
1
2
3
21
增
1.
set1.add():在指定集合中添加指定的元素
set1.add(100)
2.
set1.update(set2):将集合2的元素添加到集合1中,自动去重
set1 ={1,2,3,3,21}
set1.update({'abc','123'})
{'123', 1, 2, 3, 21, 'abc'}
print(set1)
删
1.
remove
set1.remove(元素):在指定的集合中删除指定的元素
2.
pop
set1.pop():随机删除一个
3.
set.clear():清空集合
4.判断是否包含
集合1 >= 集合2 --判断集合1中是否包含集合2
集合2 <= 集合1 -- 判断几何2中是否包含集合1
print({1,2,3,4} >={1,4})
print({1,2,3,4}<={1,4})
True
False
5.集合的数学运算
求并集: |
print({1,2,3} | {2,3,4,5})
求交集 &
print({1,2,3}&{2,3,4,5})
求差集 -
print({1,2,3}-{2,3,4,5})
求补集:^
print({1,2,3}^{2,3,4,5})
{1, 2, 3, 4, 5}
{2, 3}
{1}
{1, 4, 5}
容器(列表,元组,集合,字典)前面加可以将容器里面的元素全部取出*
网友评论