Day 5:dict 和 set 基本操作、字典视图等 6 个方面详解总结
你好,我是悦创。
1. 字典
字典(dict),一种映射对象(mapping)类型,键值对的容器。
1.1 五种创建方法
创建 dict 的方法很简单,使用一对中括号 {}
,键值对中间用冒号,每项间使用逗号分割。
1. 手动创建
empty = {}
dic = {'a': 1, 'c': 3, 'e': 5}
2. 使用 dict() 构造函数
In [10]: dict(a=1,b=2,c=3)
Out[10]: {'a': 1, 'b': 2, 'c': 3}
3. 键值对 + 关键字参数
第一个参数为字典,后面是一系列关键字参数,如 c=3
:
In [9]: dict({'a': 1, 'b': 2}, c=3, d=4)
Out[9]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
4. 可迭代对象
列表,元素又为一个元组,后面再加一系列关键字参数。
In [8]: dict([('a', 1),('b', 2)], c=3)
Out[8]: {'a': 1, 'b': 2, 'c': 3}
5. fromkeys() 方法
已知键集合(keys),values 为初始值:
In [7]: {}.fromkeys(['k1', 'k2', 'k3'], [1, 2, 3])
Out[7]: {'k1': [1, 2, 3], 'k2': [1, 2, 3], 'k3': [1, 2, 3]}
In [14]: {'a': 1, 'b': 2}.fromkeys(['c', 'd'], [1, 2])
Out[14]: {'c': [1, 2], 'd': [1, 2]}
1.2 基本操作
基本操作包括:
- 创建字典
- 遍历字典
- 获取所有键集合(keys)
- 获取所有值集合(values)
- 获取某键对应的值
- 添加、修改或删除一个键值对
创建字典 d:
In [2]: d = {'a': 1, 'b': 2, 'c': 3}
字典属于容器,遍历容器每一项:
In [3]: for key, val in d.items():
...: print(key,val)
结果:
a 1
b 2
c 3
获取所有键集合:
# 方法 1
In [4]: set(d)
Out[4]: {'a', 'b', 'c'}
# 方法 2
In [6]: set(d.keys())
Out[6]: {'a', 'b', 'c'}
获取所有值集合:
In [7]: set(d.values())
Out[7]: {1, 2, 3}
判断键是否在字典中:
# 判断键 c 在 d 中?
In [8]: if 'c' in d:
...: print('键 c 在字典 d 中')
键 c 在字典 d 中
# 判断键 c 不在 d 中?
In [9]: if 'e' not in d:
...: print('键 e 不在字典 d 中')
键 e 不在字典 d 中
获取某键对应的值:
In [10]: d.get('c')
Out[10]: 3
添加或修改一个键值对:
In [11]: d['d'] = 4
...: print(d)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
删除一个键值对:
# 方法 1
In [12]: del d['d']
...: print(d)
{'a': 1, 'b': 2, 'c': 3}
# 方法 2
In [13]: d.pop('c') # 返回 3
...: print(d)
{'a': 1, 'b': 2}
1.3 字典视图
字典自带的三个方法 d.items()
、d.keys()
、d.values()
,分别返回如下对象:
In [14]: d = {'a': 1, 'b': 2, 'c': 3}
In [15]: d.keys()
Out[15]: dict_keys(['a', 'b', 'c'])
In [16]: d.values()
Out[16]: dict_values([1, 2, 3])
In [17]: d.items()
Out[17]: dict_items([('a', 1), ('b', 2), ('c', 3)])
它们都是原字典的视图,修改原字典对象,视图对象的值也会发生改变。
a = {'a':1, 'b':2, 'c':3}
key_lst = a.keys() # 创建字典的键集合视图
代码可视图如下所示:
删除键 b,由代码执行可视化图可看到,视图对象 key_lst
值也发生改变。
items()
,也是返回一个视图对象:
a = {'a':1, 'b': 2, 'c': 3}
items = a.items()
修改字典,可看到视图对象 items 的值也会改变:
a['c'] = 4
1.4 字典的键
所有对象都能作为字典的键吗?
如果一个列表对象 lst 试图作为字典的键,会出现什么问题。
实验一下:
In [1]: lst = [1, 2]
In [2]: d = {lst: 'ok?'}
TypeError: unhashable type: 'list'
会抛出如上 TypeError 异常:不可哈希的类型 list。
因为列表是可变对象,而可变对象是不可哈希的,所以会抛出如上异常。
结论:可哈希的对象才能作为字典的键,不可哈希的对象不能作为字典的键。
2. 集合
集合是一种不允许元素出现重复的容器。
案例:判断一个列表中是否含有重复元素,便可借助集合这种数据类型。
def duplicated(lst):
return len(lst) != len(set(lst)) # 不相等就意味着含重复元素
2.1 创建
与字典(dict)类似,集合(set)也是由一对花括号({}
)创建。但是,容器内的元素不是键值对。
a = {1, 2, 3}
示意图如下:
同字典类似,集合内的元素必须是可哈希类型(hashable)。
这就意味着 list、dict 等不可哈希的对象不能作为集合的元素。
In [1]: {[1, 2]}
TypeError: unhashable type: 'list'
另一种创建集合的方法,是通过 Python 的内置的 set 函数,参数类型为可迭代对象 Iterable。
In [1]: set([1, 3, 5, 7])
Out[1]: {1, 3, 5, 7}
2.2 常用方法
集合自带的方法与数学中的集合操作比较类似,提供查找集合间的并、交、差集、子集判断。
求并集:
a = {1, 3, 5, 7}
b, c = {3, 4, 5, 6}, {6, 7, 8, 9}
d = a.union(b, c) # {1, 3, 4, 5, 6, 7, 8, 9}
求差集:
a = {1, 3, 5, 7}
b, c = {3, 4, 5, 6}, {6, 7, 8, 9}
d = a.difference(b, c) # {1}
求交集:
a = {1, 3, 5, 7}
b, c = {3, 4, 5, 6}, {6, 7, 8, 9}
d = a.intersection(b, c) # {}
a 是 b 的子集吗?
In [15]: a = {1,3,5,7}
In [16]: b = {3,4,5,6}
In [17]: a.issubset(b)
Out[17]: False
In [18]: a.issubset(a)
Out[18]: True
In [19]: a.issubset({1,3,5,7,8})
Out[19]: True
小结
今天,与大家一起学习了 Python 另一类 hash map table。包括:
- 字典创建的五种创建方法和基本操作
- 字典视图
以及,不能包含重复元素的集合(set)的创建和常用方法。
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】
AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
- 0
- 0
- 0
- 0
- 0
- 0