Python序列之字典和集合

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)   # --差集

个人总结,仅供参考

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值