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序列之字典和集合_第1张图片

Python序列之字典和集合_第2张图片

Python序列之字典和集合_第3张图片
扩容
python会根据散列表的拥挤程度扩容
扩容指的是:创造更大的数组,将原有内容拷贝到新数组中
一般接近2/3时,数据就会扩容

  • 取的过程
    Python序列之字典和集合_第4张图片

Python序列之字典和集合_第5张图片

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

个人总结,仅供参考

你可能感兴趣的:(笔记)