自学Python-06 基本数据类型(五、字典Dictionary)
定义
与以连续整数为索引的序列不同,字典是以关键字为索引的,关键字可以是任意不可变类型,通常是字符串或数字。如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作关键字。但如果元组直接或间接地包含了可变对象,那么它就不能用作关键字。列表不能用作关键字,因为列表可以通过索引、切片或 append() 和 extend() 之类的方法来改变。
理解字典的最好方式,就是将它看做是一个 键 : 值对的集合,键必须是唯一的(在一个字典中)。一对花括号可以创建一个空字典:{} 。另一种初始化字典的方式是在一对花括号里放置一些以逗号分隔的键值对,而这也是字典输出的方式。
字典主要的操作是使用关键字存储和解析值。可存储任意类型对象。
基本操作
1.创建字典
还可以使用字典的构造函数创建
dict() 构造函数可以直接从键值对序列里创建字典。
如果是往字典中新增
2.访问字典
3.修改字典
4.删除指定元素
以上增删改查,包括创建都很简单,除了保持key唯一且不可变的原则外,其他没什么可注意的了。有点编程基础的看这部分肯定都可以一目十行,不过多注意我标红色部分就好。
方法
1.clear()
清空字典内所有元素。无返回值
2.copy()
返回一个字典的浅复制。有返回值
这和直接赋值有啥区别?看实例你就懂了
1.直接赋值,实际还是同一个引用,我们用id函数打印了地址,发现是相同的
2.改成浅复制看看
两个地址不一样了吧,(a_dict为啥根截图1中不一样了,因为我重新运行了啊)
3.如何理解"拷贝父对象,不会拷贝对象的内部的子对象"这句话?
首先可以理解为:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用,如下实例:
图中的一级目录就是指name,num,二级目录就是1,2,3,实例做了两个操作,修改源数据的name值和删除源数据列表中的1,看打印结果,直接赋值的由于都是引用,所以源数据改自己也跟着改,copy的只改了二层目录下的数据,而一层目录下的name值没有发生改变。
3.fromkeys(seq[, value])
函数用于创建并返回一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。有返回值
4.get(key, default=None)
返回指定键的值,如果值不在字典中返回默认值。
5.key in dict
用于判断键是否存在于字典中,如果键在字典 dict 里返回 true,否则返回 false。而 not in 操作符刚好相反,如果键在字典 dict 里返回 false,否则返回 true。
6.items()
该方法以列表返回可遍历的(键, 值) 元组数组。有返回值
场景使用后面再说吧,先学语法吧
7.keys()
返回一个可迭代对象,可以使用 list() 来转换为列表。有返回值
8.values()
返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。有返回值
9.setdefault(key, default=None)
方法和 get()方法 类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。有返回值,如果 key 在 字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回default ,default 默认值为 None。
10.update(dict2)
把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里。无返回值
11.pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。有返回值
12.popitem()
方法随机返回并删除字典中的最后一对键和值。有返回值