字典:当索引不好用时
字典类似于Java中的Map,就是建立两个列表间的映射(key-value)。
使用 大括号{} 定义,由 “键” 和 “值” 共同构成,每一对键值组合称为 “项”
- 字典中的键独一无二,且必须不可变类型
- 值可重复,可以取任意值
- 字典不支持拼接和重复操作的,因为键独一无二
创建方法
- 直接使用 大括号{} ,如dict1
- 使用 dict() 内置函数创建
- 键值对要打包成元组送入,因为 dict()只接受一个序列,如dict2
- 通过提供具有映射关系的参数建立,键的位置不能加上引号,如dict3
1 | dict1 = {'L': 1, 'O': 2, 'V': 3, 'E': 4} |
访问方法
访问字典里的值与访问序列雷子,只需要把相应的键放入 方括号[] 即可
- 如果键不存在,则抛出KeyError
- 如果是一个赋值语句,则覆盖或者新建键值对
内置方法
fromkeys(seq[, value])
fromkeys()方法用于新建并返回一个新的字典,它有两个参数:
- 第一个参数是字典的键;
- 第二个是可选的,传入所有键对应的值,如果没有传入,则默认None
- 如果第二参数传入的是序列,也会被当成一个Value赋给所有的key
keys(),values(),items()
- keys()返回字典中所有的键 <class ‘dict_keys’>
- values()返回字典中所有的值 <class ‘dict_values’>
- items()返回字典中所有的键值对 <class ‘dict_items’>
get(key[, default])
get() 提供了更宽松的方法访问字典,当键不存在时,不会报错,而是返回None
- 第二个参数用于设置键不存在时返回的值,默认None,因此默认返回None
- 可以用成员资格操作符 in 和 not in 来判断键是否存在
clear()
clear() 用于清空词典
copy()
copy() 方法用于拷贝(浅拷贝)整个字典
-
在这里,浅拷贝的含义是,字典是不同字典,但是里面的键,值为同一内存区域
1
2
3
4
5
6
7
8
9
101:[1,2,3]} dict1 = {
dict2 = dict1.copy()
# 字典已经不同
id(dict1) == id(dict2)
False
# 但是子对象相同
1]) == id(dict2[1]) id(dict1[
True -
扩展学习:
- 直接赋值:对象的引用(别名)
- 浅拷贝:copy,拷贝父对象,子对象还是引用
- 深拷贝:deepcopy,完全拷贝,父子对象都拷贝
pop(ket[, default]) 和 popitem()
- pop()是给定键弹出对应的值
- popitem()弹出最后一个项
- 这里的弹出是返回并删除
setdefault(key[, default])
setdefault() 与 get() 类似,但是,setdefault() 在字典中找不到键时会自动添加
- 第二个参数是不仅是返回值,还是新建键值对的值
update([other])
update() 方法用于更新字典,将键对应的值更新
- 此功能与新建键值对的覆盖类似
集合:你就是我的唯一
与Java中的Set相同,Python中的集合(set)的特点是:唯一,无序,与字典相同使用 大括号{},但是没有映射关系
创建集合
- 直接把一大堆元素用 大括号{} 括起来
- 但是如果要建立空集合,这样子做会被Python认为是字典
- 用 set() 内置函数,传入可迭代对象
1 | 1,2,3,4} set1 = { |
- 如果创建中的元素有重复,会只留下一个
访问集合
因为集合是无序的,因此不能使用下标访问,只能用迭代把集合中的数据一个个读取出来
- 可以用 in 和 not in,判断一个元素是否存在
- 可以使用add(),remove()内置方法增删元素
不可变集合
不可变集合(frozenset)中的元素只能访问,不能修改
- 使用 frozenset() 函数创建不可变集合,传入可迭代对象,返回为<class ‘frozenset’>