1.字典
"键值对"的无序可变序列,通过键对象找值对象;
"键是任意不可变数据",如:整数, 浮点型, 字符串, 元祖.但是列表, 字典, 集合这些可变对象不可作为键,键不可重复.
1.1字典的创建
- 通过{}, 或者dict()来创建字典对象
# In:
a = {'name': 'zs', 'age': 18, '身高': [180, 170]}
b = dict(name='ls', age=23, 身高=190)
c = dict([('name', 'ww'), ('age', 20), ('身高', 165)])
print(a, b, c, sep='\n')
#Out:
{'name': 'zs', 'age': 18, '身高': [180, 170]}
{'name': 'ls', 'age': 23, '身高': 190}
{'name': 'ww', 'age': 20, '身高': 165}
- 通过zip()创建字典对象
#In:
k = ['name', 'age', '身高']
v = ['zs', 12, 165]
d = dict(zip(k, v))
print(d)
#Out:
{'name': 'zs', 'age': 12, '身高': 165}
- 通过fromkeys创建值对空的字典
#In:
a = dict.fromkeys(['name', 'age', '身高'])
print(a)
#Out:
{'name': None, 'age': None, '身高': None}
1.2字典元素的访问
- 通过[键]获得’值’,若键不存在,会报异常
a = {'name': 'zs', 'age': 18, '身高': [180, 170]}
print(a['name'])
print(a['sex']) # --键不存在会报错
- 通过get()方法获得’值’,优点:键不存在时返回None,指定键不存在时返回默认对象
a = {'name': 'zs', 'age': 18, '身高': [180, 170]}
print(a.get('name'))
print(a.get('sex')) # --键不存在会输出None
- 列出所有"键值对"
a = {'name': 'zs', 'age': 18, '身高': [180, 170]}
print(a.items())
- 列出所有的键和值
a = {'name': 'zs', 'age': 18, '身高': [180, 170]}
print(a.keys(), a.values(), sep='\n')
- len()键值对的个数
a = {'name': 'zs', 'age': 18, '身高': [180, 170]}
print(len(a))
- 检测键是否存在"in"操作符
a = {'name': 'zs', 'age': 18, '身高': [180, 170]}
print('name' in a) # --返回True or False
1.3字典元素的添加, 修改, 删除
- 添加新键值对(添加已有键的将会覆盖)
a = {'name': 'zs', 'age': 18, '身高': 180}
a['sex'] = 'male' # --没出现的key是新增
a['name'] = 'ls' # -- 出现过的key是替换value
print(a)
- 使用update()将新字典全部添加,key重复覆盖
a = {'name': 'zs', 'age': 18, '身高': 180}
b = {'name': 'ls', 'sex': 'male'}
a.update(b)
print(a)
- del()删除指定键,对也无
a = {'name': 'zs', 'age': 18, '身高': 180}
del(a['name'], a['age']) # --可以同时删除多个键值
print(a)
- clear()删除所有键值对
a = {'name': 'zs', 'age': 18, '身高': 180}
a.clear()
print(a) # -- 输出a是个空字典
- pop()删除键,将值进行赋值
a = {'name': 'zs', 'age': 18, '身高': 180}
b = a.pop('name')
print(b, type(b)) # --返回对应值as,是字符串格式
- popitem():随机删除和返回该键值对
a = {'name': 'zs', 'age': 18, '身高': 180}
b = a.popitem()
print(a, b, sep='\n') # -- 返回的b是删除的键值对
1.4序列解包
可以方便给多个变量赋值
- 元祖, 列表解包
x, y, z = (10, 20, 30)
(x, y, z) = (10, 20, 30)
[a, b, c] = (10, 20, 30)
print(x) # --返回对应value
print(y)
print(z)
- 字典解包
a = {'name': 'zs', 'age': 18, '身高': 180}
name, age, 身高 = a # --返回name
name, age, 身高 = a.values() # --返回name的值
name, age, 身高 = a.items() # --返回键值对
print(name)
1.5 字典核心底层原理(重要)
- 存的过程
扩容
python会根据散列表的拥挤程度扩容
扩容指的是:创造更大的数组,将原有内容拷贝到新数组中
一般接近2/3时,数据就会扩容
- 取的过程
2.集合
集合是无序可变,元素不能重复.
实际上,集合的底层是字典实现
集合的元素就是字典"键值对"的键,所以也是不可变的
2.1集合的创建和删除
- 用{}创建,用add()添加
a = {1, 2, 3}
a.add(4)
print(a)
- 使用set()添加
a = {1, 2, 3}
a = set((1, 2, 34)) # -- 通过元祖添加
a = set([1, 2, 3]) # -- 通过list添加
- remove()删除指定元素,clear()清空整个集合
a = {1, 2, 3}
a.remove(3)
print(a)
2.2集合的相关操作
python对集合提供并集, 交集, 差集, 等运算
a = {1, 2, 3}
b = {1, 2, 5}
print(a | b) # --并集
print(a & b) # --交集
print(a - b) # --差集
个人总结,仅供参考