Python-6.字典与集合
砂糖桑
Aug 12, 2022
Last edited: 2022-8-14
type
Post
status
Published
date
Aug 12, 2022
slug
python-6
summary
之前的字符串、列表、元组都是序列类型,元素在位置上具有先后关系,所以可以使用位置来访问元素;而字典与集合是无序类型,不能使用位置来访问元素——我们使用字典与集合都是关注它们的操作,而不会关注元素的顺序。字典主要用于检索,集合主要用于存在性测试。
tags
Python课堂笔记合集
category
Python
icon
password
Property
Aug 14, 2022 11:17 AM
字符串、列表、元组都是序列类型,其中的元素在位置上具有先后关系,所以可以使用位置来访问元素;而字典与集合是无序类型,不能使用位置来访问元素。
字典与元组的应用场景和主要进行的操作不同。字典是Python中唯一的映射类型,主要关注元素的检索、插入与删除;Python中的集合模拟的是数学上的集合,主要关注集合的并交差等运算。
字典dict
认识字典
- 字典是无序的键值对的集合体,使用键来检索相应的值。
- 字典的原理是对键进行哈希运算,根据计算的结果决定值的存储地址。所以字典的查询效率是很高的。
- 由于字典的原理是哈希表,所以要求键必须是可哈希的,即键必须是不可变类型。可以使用hash()函数计算哈希值来判断一个数据是否能作为字典的键:

- 字典的值可以是列表、元组、字典等复杂类型。
- 字典是可变类型,可以对其中的元素进行增删改等操作,比较灵活。
字典的操作
字典的创建
- 使用 字典名={键1:值1,键2:值2,……} 的方式初始化一个字典。
- 使用 字典名={} 的方式创建一个空字典,后续再向字典中插入键值对。
- 使用
dict()函数创建字典,这种方式比较灵活。 dict()的参数为空,返回一个空字典。dict()的参数可以为一个n行2列的可迭代对象,返回一个具有n个键值对的字典。dict()也可以接收 键=值 这样的参数,和第一种赋值方式区别不大。但字符串不能加引号。

字典的访问
- 使用 字典名[键] 的方式可以访问对应的值。但是如果这个键不存在就会报错。
- 使用 字典名.get(键,symble) 的方式访问对应的值。如果键不存在则返回symble这个值。
推荐使用get的方式来访问字典的值,这样更安全。后面还会了解到一些返回值的同时还会对元素进行修改的方法。
字典的更新
使用 字典名[键]=值 的方式对字典元素进行更新:
- 如果键存在,则将旧值修改为新值
- 如果键不存在,则将这个键值对插入字典中。
字典元素的删除
使用del删除字典元素或整个字典:
- del 字典名[键] 可以删除键值对。如果键不存在会报错。
- del 字典名 删除整个字典。
字典元素测试
使用in或not in可以测试某个键是否在字典中,返回True或者False。它可以作为访问元素之前的操作,避免报错。
一些函数
- len()统计字典中元素的个数。
- max()、min()获取字典键的最大值和最小值。
- sorted()将字典的键排序后以列表的形式返回,可以指定reverse参数。
字典的常用方法
fromkeys()方法
通常的格式为
{}.fromkeys(seq,value),返回一个以seq中的元素作为键,value作为值的字典。如果value缺省则值为None。
- 获取键/值序列的方法
d.keys():返回字典d的键组成的列表d.values():返回d的值组成的列表d.items():返回以d的键值二元组为元素的列表
- 修改字典元素的方法
d.pop(key):删除对应的键值对并返回相应的值。d.popitem(key):删除键值对,返回键值二元组。d.setdefault(key,value):如果key存在,返回其值;如果不存在,将key:value插入字典,并返回value。d.update(d1):将字典d1合并到字典d中,d1本身不变。
这个方法比get方法多了键不存在时插入的处理。
字典的遍历
- 遍历字典的关键字
d={"x":2,"y":3,"z":4} for key in d.keys() print(key)
- 遍历字典的值
d={"x":2,"y":3,"z":4} for value in d.values() print(value)
- 遍历字典的键值对
d={"x":2,"y":3,"z":4} for key,value in d.items(): print(key,value)
集合set
集合的可变集合和不可变集合两种,它们中的元素都是不可变的,就像字典的键一样。
集合的创建
- 使用{1,2,3,4}的方式创建一个非空集合。
- 使用set()创建一个空集合。
不能是()、[]、{},因为它们分别代表空元组、空列表、空字典。
- 使用set(seq)将序列转化为集合。由于集合中的元素不能重复,所以可以达到去重的效果——这么操作效率很高。
- 使用frozenset()创建一个不可变集合。使用set创建的集合是可变的,而frozenset创建的集合不可变,所以可以作为其他集合的元素或字典的键。
集合的运算
传统的集合运算
- 并集
s1 | s2 | … | sn:计算n个集合的并集,返回新集合。
- 交集
s1 & s2 & … & sn:计算n个集合的jo集,返回新集合。
- 差集
s1 - s2 - … - sn:将s1中不属于s2、s3、…、sn的元素作为新集合返回。
- 对称差集
s1 ^ s2:将s1和s2相异的元素作为一个新集合返回。
- 相等
s1 = s2 或 s1 != s2:返回True或False。
- 真包含/包含
s1 > s2 或 s1 >= s2:s1真包含s2或s1包含s2。
- 真包含于/包含于
s1 < s2 或 s1 <= s2:s1真包含于s2或s1包含于s2。
- 属于/不属于
x in s 或 x not in s:x属于s或x不属于s。
集合的常用方法
主要是修改可变集合中元素的方法。
s.add(x):向集合s中添加元素x。
s.remove(x):从集合中删除x。如果x不存在,报错。
s.discard(x):从集合中删除x。x不存在也不会报错。
s.pop():任意删除一个元素并返回。
s.update(s1,s2,…,sn):将s1,s2,…并入s中。
集合的遍历
使用for循环遍历集合中的元素即可。
s={1,2,3,4,5} for i in s: print(i)
- Catalog
- About
0%